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);
218 static bool arp_key_eq(const struct neighbour *neigh, const void *pkey)
220 return neigh_key_eq32(neigh, pkey);
223 static int arp_constructor(struct neighbour *neigh)
226 struct net_device *dev = neigh->dev;
232 memcpy(neigh->primary_key, &inaddr_any, arp_tbl.key_len);
234 addr = *(__be32 *)neigh->primary_key;
242 neigh->type = inet_addr_type_dev_table(dev_net(dev), dev, addr);
245 __neigh_parms_put(neigh->parms);
246 neigh->parms = neigh_parms_clone(parms);
250 neigh->nud_state = NUD_NOARP;
251 neigh->ops = &arp_direct_ops;
252 neigh->output = neigh_direct_output;
269 if (neigh->type == RTN_MULTICAST) {
270 neigh->nud_state = NUD_NOARP;
271 arp_mc_map(addr, neigh->ha, dev, 1);
273 neigh->nud_state = NUD_NOARP;
274 memcpy(neigh->ha, dev->dev_addr, dev->addr_len);
275 } else if (neigh->type == RTN_BROADCAST ||
277 neigh->nud_state = NUD_NOARP;
278 memcpy(neigh->ha, dev->broadcast, dev->addr_len);
282 neigh->ops = &arp_hh_ops;
284 neigh->ops = &arp_generic_ops;
286 if (neigh->nud_state & NUD_VALID)
287 neigh->output = neigh->ops->connected_output;
289 neigh->output = neigh->ops->output;
294 static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb)
333 static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb)
337 struct net_device *dev = neigh->dev;
338 __be32 target = *(__be32 *)neigh->primary_key;
339 int probes = atomic_read(&neigh->probes);
376 probes -= NEIGH_VAR(neigh->parms, UCAST_PROBES);
378 if (!(READ_ONCE(neigh->nud_state) & NUD_VALID))
380 neigh_ha_snapshot(dst_ha, neigh, dev);
383 probes -= NEIGH_VAR(neigh->parms, APP_PROBES);
385 neigh_app_ns(neigh);
1049 struct neighbour *neigh;
1089 neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev);
1090 err = PTR_ERR(neigh);
1091 if (!IS_ERR(neigh)) {
1095 err = neigh_update(neigh, (r->arp_flags & ATF_COM) ?
1099 neigh_release(neigh);
1104 static unsigned int arp_state_to_flags(struct neighbour *neigh)
1106 if (neigh->nud_state&NUD_PERMANENT)
1108 else if (neigh->nud_state&NUD_VALID)
1121 struct neighbour *neigh;
1124 neigh = neigh_lookup(&arp_tbl, &ip, dev);
1125 if (neigh) {
1126 if (!(READ_ONCE(neigh->nud_state) & NUD_NOARP)) {
1127 read_lock_bh(&neigh->lock);
1128 memcpy(r->arp_ha.sa_data, neigh->ha,
1130 r->arp_flags = arp_state_to_flags(neigh);
1131 read_unlock_bh(&neigh->lock);
1136 neigh_release(neigh);
1143 struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev);
1147 if (neigh) {
1148 if ((READ_ONCE(neigh->nud_state) & NUD_VALID) && !force) {
1149 neigh_release(neigh);
1153 if (READ_ONCE(neigh->nud_state) & ~NUD_NOARP)
1154 err = neigh_update(neigh, NULL, NUD_FAILED,
1158 neigh_release(neigh);
1159 neigh_remove_one(neigh, tbl);