Message ID | 20130211111303.GA23991@order.stressinduktion.org |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
Hannes Frederic Sowa wrote: > This strictly a RFC only (I also left out my signed-off). This patch > introduces helper functions to set and check for the need of scope ids. > > Suggested-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> > Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> > --- > include/net/ipv6.h | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/include/net/ipv6.h b/include/net/ipv6.h > index 851d541..1f61dc9 100644 > --- a/include/net/ipv6.h > +++ b/include/net/ipv6.h > @@ -319,6 +319,19 @@ static inline int ipv6_addr_src_scope(const struct in6_addr *addr) > return __ipv6_addr_src_scope(__ipv6_addr_type(addr)); > } > > +static inline bool __ipv6_addr_needs_scope_id(int type) > +{ > + return type != IPV6_ADDR_ANY && > + !(type & IPV6_ADDR_LOOPBACK && type & IPV6_ADDR_UNICAST) && > + __ipv6_addr_src_scope(type) <= IPV6_ADDR_SCOPE_LINKLOCAL; > +} > + > +static inline __u32 ipv6_iface_scope_id(const struct in6_addr *addr, > + unsigned int iface) > +{ > + return __ipv6_addr_needs_scope_id(__ipv6_addr_type(addr)) ? iface : 0; > +} > + > static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr *a2) > { > return memcmp(a1, a2, sizeof(struct in6_addr)); > Yes, something like that. --yoshfuji -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index 851d541..1f61dc9 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h @@ -319,6 +319,19 @@ static inline int ipv6_addr_src_scope(const struct in6_addr *addr) return __ipv6_addr_src_scope(__ipv6_addr_type(addr)); } +static inline bool __ipv6_addr_needs_scope_id(int type) +{ + return type != IPV6_ADDR_ANY && + !(type & IPV6_ADDR_LOOPBACK && type & IPV6_ADDR_UNICAST) && + __ipv6_addr_src_scope(type) <= IPV6_ADDR_SCOPE_LINKLOCAL; +} + +static inline __u32 ipv6_iface_scope_id(const struct in6_addr *addr, + unsigned int iface) +{ + return __ipv6_addr_needs_scope_id(__ipv6_addr_type(addr)) ? iface : 0; +} + static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr *a2) { return memcmp(a1, a2, sizeof(struct in6_addr));