Lines Matching refs:neigh
128 static int arp_constructor(struct neighbour *neigh);
129 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb);
130 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb);
219 static bool arp_key_eq(const struct neighbour *neigh, const void *pkey) in arp_key_eq() argument
221 return neigh_key_eq32(neigh, pkey); in arp_key_eq()
224 static int arp_constructor(struct neighbour *neigh) in arp_constructor() argument
226 __be32 addr = *(__be32 *)neigh->primary_key; in arp_constructor()
227 struct net_device *dev = neigh->dev; in arp_constructor()
238 neigh->type = inet_addr_type_dev_table(dev_net(dev), dev, addr); in arp_constructor()
241 __neigh_parms_put(neigh->parms); in arp_constructor()
242 neigh->parms = neigh_parms_clone(parms); in arp_constructor()
246 neigh->nud_state = NUD_NOARP; in arp_constructor()
247 neigh->ops = &arp_direct_ops; in arp_constructor()
248 neigh->output = neigh_direct_output; in arp_constructor()
265 if (neigh->type == RTN_MULTICAST) { in arp_constructor()
266 neigh->nud_state = NUD_NOARP; in arp_constructor()
267 arp_mc_map(addr, neigh->ha, dev, 1); in arp_constructor()
269 neigh->nud_state = NUD_NOARP; in arp_constructor()
270 memcpy(neigh->ha, dev->dev_addr, dev->addr_len); in arp_constructor()
271 } else if (neigh->type == RTN_BROADCAST || in arp_constructor()
273 neigh->nud_state = NUD_NOARP; in arp_constructor()
274 memcpy(neigh->ha, dev->broadcast, dev->addr_len); in arp_constructor()
278 neigh->ops = &arp_hh_ops; in arp_constructor()
280 neigh->ops = &arp_generic_ops; in arp_constructor()
282 if (neigh->nud_state & NUD_VALID) in arp_constructor()
283 neigh->output = neigh->ops->connected_output; in arp_constructor()
285 neigh->output = neigh->ops->output; in arp_constructor()
290 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb) in arp_error_report() argument
329 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb) in arp_solicit() argument
333 struct net_device *dev = neigh->dev; in arp_solicit()
334 __be32 target = *(__be32 *)neigh->primary_key; in arp_solicit()
335 int probes = atomic_read(&neigh->probes); in arp_solicit()
372 probes -= NEIGH_VAR(neigh->parms, UCAST_PROBES); in arp_solicit()
374 if (!(neigh->nud_state & NUD_VALID)) in arp_solicit()
376 neigh_ha_snapshot(dst_ha, neigh, dev); in arp_solicit()
379 probes -= NEIGH_VAR(neigh->parms, APP_PROBES); in arp_solicit()
381 neigh_app_ns(neigh); in arp_solicit()
974 struct neighbour *neigh; in arp_req_set() local
1014 neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev); in arp_req_set()
1015 err = PTR_ERR(neigh); in arp_req_set()
1016 if (!IS_ERR(neigh)) { in arp_req_set()
1020 err = neigh_update(neigh, (r->arp_flags & ATF_COM) ? in arp_req_set()
1024 neigh_release(neigh); in arp_req_set()
1029 static unsigned int arp_state_to_flags(struct neighbour *neigh) in arp_state_to_flags() argument
1031 if (neigh->nud_state&NUD_PERMANENT) in arp_state_to_flags()
1033 else if (neigh->nud_state&NUD_VALID) in arp_state_to_flags()
1046 struct neighbour *neigh; in arp_req_get() local
1049 neigh = neigh_lookup(&arp_tbl, &ip, dev); in arp_req_get()
1050 if (neigh) { in arp_req_get()
1051 if (!(neigh->nud_state & NUD_NOARP)) { in arp_req_get()
1052 read_lock_bh(&neigh->lock); in arp_req_get()
1053 memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len); in arp_req_get()
1054 r->arp_flags = arp_state_to_flags(neigh); in arp_req_get()
1055 read_unlock_bh(&neigh->lock); in arp_req_get()
1060 neigh_release(neigh); in arp_req_get()
1067 struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev); in arp_invalidate() local
1070 if (neigh) { in arp_invalidate()
1071 if (neigh->nud_state & ~NUD_NOARP) in arp_invalidate()
1072 err = neigh_update(neigh, NULL, NUD_FAILED, in arp_invalidate()
1075 neigh_release(neigh); in arp_invalidate()