Lines Matching refs:neigh
124 static int arp_constructor(struct neighbour *neigh);
125 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb);
126 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb);
215 static bool arp_key_eq(const struct neighbour *neigh, const void *pkey) in arp_key_eq() argument
217 return neigh_key_eq32(neigh, pkey); in arp_key_eq()
220 static int arp_constructor(struct neighbour *neigh) in arp_constructor() argument
223 struct net_device *dev = neigh->dev; in arp_constructor()
229 memcpy(neigh->primary_key, &inaddr_any, arp_tbl.key_len); in arp_constructor()
231 addr = *(__be32 *)neigh->primary_key; in arp_constructor()
239 neigh->type = inet_addr_type_dev_table(dev_net(dev), dev, addr); in arp_constructor()
242 __neigh_parms_put(neigh->parms); in arp_constructor()
243 neigh->parms = neigh_parms_clone(parms); in arp_constructor()
247 neigh->nud_state = NUD_NOARP; in arp_constructor()
248 neigh->ops = &arp_direct_ops; in arp_constructor()
249 neigh->output = neigh_direct_output; in arp_constructor()
266 if (neigh->type == RTN_MULTICAST) { in arp_constructor()
267 neigh->nud_state = NUD_NOARP; in arp_constructor()
268 arp_mc_map(addr, neigh->ha, dev, 1); in arp_constructor()
270 neigh->nud_state = NUD_NOARP; in arp_constructor()
271 memcpy(neigh->ha, dev->dev_addr, dev->addr_len); in arp_constructor()
272 } else if (neigh->type == RTN_BROADCAST || in arp_constructor()
274 neigh->nud_state = NUD_NOARP; in arp_constructor()
275 memcpy(neigh->ha, dev->broadcast, dev->addr_len); in arp_constructor()
279 neigh->ops = &arp_hh_ops; in arp_constructor()
281 neigh->ops = &arp_generic_ops; in arp_constructor()
283 if (neigh->nud_state & NUD_VALID) in arp_constructor()
284 neigh->output = neigh->ops->connected_output; in arp_constructor()
286 neigh->output = neigh->ops->output; in arp_constructor()
291 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb) in arp_error_report() argument
330 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb) in arp_solicit() argument
334 struct net_device *dev = neigh->dev; in arp_solicit()
335 __be32 target = *(__be32 *)neigh->primary_key; in arp_solicit()
336 int probes = atomic_read(&neigh->probes); in arp_solicit()
373 probes -= NEIGH_VAR(neigh->parms, UCAST_PROBES); in arp_solicit()
375 if (!(neigh->nud_state & NUD_VALID)) in arp_solicit()
377 neigh_ha_snapshot(dst_ha, neigh, dev); in arp_solicit()
380 probes -= NEIGH_VAR(neigh->parms, APP_PROBES); in arp_solicit()
382 neigh_app_ns(neigh); in arp_solicit()
1022 struct neighbour *neigh; in arp_req_set() local
1062 neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev); in arp_req_set()
1063 err = PTR_ERR(neigh); in arp_req_set()
1064 if (!IS_ERR(neigh)) { in arp_req_set()
1068 err = neigh_update(neigh, (r->arp_flags & ATF_COM) ? in arp_req_set()
1072 neigh_release(neigh); in arp_req_set()
1077 static unsigned int arp_state_to_flags(struct neighbour *neigh) in arp_state_to_flags() argument
1079 if (neigh->nud_state&NUD_PERMANENT) in arp_state_to_flags()
1081 else if (neigh->nud_state&NUD_VALID) in arp_state_to_flags()
1094 struct neighbour *neigh; in arp_req_get() local
1097 neigh = neigh_lookup(&arp_tbl, &ip, dev); in arp_req_get()
1098 if (neigh) { in arp_req_get()
1099 if (!(neigh->nud_state & NUD_NOARP)) { in arp_req_get()
1100 read_lock_bh(&neigh->lock); in arp_req_get()
1101 memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len); in arp_req_get()
1102 r->arp_flags = arp_state_to_flags(neigh); in arp_req_get()
1103 read_unlock_bh(&neigh->lock); in arp_req_get()
1108 neigh_release(neigh); in arp_req_get()
1115 struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev); in arp_invalidate() local
1119 if (neigh) { in arp_invalidate()
1120 if (neigh->nud_state & ~NUD_NOARP) in arp_invalidate()
1121 err = neigh_update(neigh, NULL, NUD_FAILED, in arp_invalidate()
1125 neigh_release(neigh); in arp_invalidate()
1126 neigh_remove_one(neigh, tbl); in arp_invalidate()