Lines Matching refs:p
128 static inline void ip6addrlbl_free(struct ip6addrlbl_entry *p) in ip6addrlbl_free() argument
130 kfree(p); in ip6addrlbl_free()
138 static bool ip6addrlbl_hold(struct ip6addrlbl_entry *p) in ip6addrlbl_hold() argument
140 return atomic_inc_not_zero(&p->refcnt); in ip6addrlbl_hold()
143 static inline void ip6addrlbl_put(struct ip6addrlbl_entry *p) in ip6addrlbl_put() argument
145 if (atomic_dec_and_test(&p->refcnt)) in ip6addrlbl_put()
146 call_rcu(&p->rcu, ip6addrlbl_free_rcu); in ip6addrlbl_put()
151 const struct ip6addrlbl_entry *p, in __ip6addrlbl_match() argument
155 if (!net_eq(ip6addrlbl_net(p), net)) in __ip6addrlbl_match()
157 if (p->ifindex && p->ifindex != ifindex) in __ip6addrlbl_match()
159 if (p->addrtype && p->addrtype != addrtype) in __ip6addrlbl_match()
161 if (!ipv6_prefix_equal(addr, &p->prefix, p->prefixlen)) in __ip6addrlbl_match()
170 struct ip6addrlbl_entry *p; in __ipv6_addr_label() local
171 hlist_for_each_entry_rcu(p, &ip6addrlbl_table.head, list) { in __ipv6_addr_label()
172 if (__ip6addrlbl_match(net, p, addr, type, ifindex)) in __ipv6_addr_label()
173 return p; in __ipv6_addr_label()
182 struct ip6addrlbl_entry *p; in ipv6_addr_label() local
187 p = __ipv6_addr_label(net, addr, type, ifindex); in ipv6_addr_label()
188 label = p ? p->label : IPV6_ADDR_LABEL_DEFAULT; in ipv6_addr_label()
247 struct ip6addrlbl_entry *last = NULL, *p = NULL; in __ip6addrlbl_add() local
253 hlist_for_each_entry_safe(p, n, &ip6addrlbl_table.head, list) { in __ip6addrlbl_add()
254 if (p->prefixlen == newp->prefixlen && in __ip6addrlbl_add()
255 net_eq(ip6addrlbl_net(p), ip6addrlbl_net(newp)) && in __ip6addrlbl_add()
256 p->ifindex == newp->ifindex && in __ip6addrlbl_add()
257 ipv6_addr_equal(&p->prefix, &newp->prefix)) { in __ip6addrlbl_add()
262 hlist_replace_rcu(&p->list, &newp->list); in __ip6addrlbl_add()
263 ip6addrlbl_put(p); in __ip6addrlbl_add()
265 } else if ((p->prefixlen == newp->prefixlen && !p->ifindex) || in __ip6addrlbl_add()
266 (p->prefixlen < newp->prefixlen)) { in __ip6addrlbl_add()
267 hlist_add_before_rcu(&newp->list, &p->list); in __ip6addrlbl_add()
270 last = p; in __ip6addrlbl_add()
310 struct ip6addrlbl_entry *p = NULL; in __ip6addrlbl_del() local
317 hlist_for_each_entry_safe(p, n, &ip6addrlbl_table.head, list) { in __ip6addrlbl_del()
318 if (p->prefixlen == prefixlen && in __ip6addrlbl_del()
319 net_eq(ip6addrlbl_net(p), net) && in __ip6addrlbl_del()
320 p->ifindex == ifindex && in __ip6addrlbl_del()
321 ipv6_addr_equal(&p->prefix, prefix)) { in __ip6addrlbl_del()
322 hlist_del_rcu(&p->list); in __ip6addrlbl_del()
323 ip6addrlbl_put(p); in __ip6addrlbl_del()
371 struct ip6addrlbl_entry *p = NULL; in ip6addrlbl_net_exit() local
376 hlist_for_each_entry_safe(p, n, &ip6addrlbl_table.head, list) { in ip6addrlbl_net_exit()
377 if (net_eq(ip6addrlbl_net(p), net)) { in ip6addrlbl_net_exit()
378 hlist_del_rcu(&p->list); in ip6addrlbl_net_exit()
379 ip6addrlbl_put(p); in ip6addrlbl_net_exit()
468 struct ip6addrlbl_entry *p, in ip6addrlbl_fill() argument
478 ip6addrlbl_putmsg(nlh, p->prefixlen, p->ifindex, lseq); in ip6addrlbl_fill()
480 if (nla_put_in6_addr(skb, IFAL_ADDRESS, &p->prefix) < 0 || in ip6addrlbl_fill()
481 nla_put_u32(skb, IFAL_LABEL, p->label) < 0) { in ip6addrlbl_fill()
493 struct ip6addrlbl_entry *p; in ip6addrlbl_dump() local
498 hlist_for_each_entry_rcu(p, &ip6addrlbl_table.head, list) { in ip6addrlbl_dump()
500 net_eq(ip6addrlbl_net(p), net)) { in ip6addrlbl_dump()
501 err = ip6addrlbl_fill(skb, p, in ip6addrlbl_dump()
532 struct ip6addrlbl_entry *p; in ip6addrlbl_get() local
554 p = __ipv6_addr_label(net, addr, ipv6_addr_type(addr), ifal->ifal_index); in ip6addrlbl_get()
555 if (p && !ip6addrlbl_hold(p)) in ip6addrlbl_get()
556 p = NULL; in ip6addrlbl_get()
560 if (!p) { in ip6addrlbl_get()
567 ip6addrlbl_put(p); in ip6addrlbl_get()
571 err = ip6addrlbl_fill(skb, p, lseq, in ip6addrlbl_get()
575 ip6addrlbl_put(p); in ip6addrlbl_get()