Date: Thu, 11 Feb 2010 23:56:04 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r203791 - user/kmacy/head_flowtable_v6/sys/net Message-ID: <201002112356.o1BNu4X4029030@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Thu Feb 11 23:56:03 2010 New Revision: 203791 URL: http://svn.freebsd.org/changeset/base/203791 Log: - replace usage of sockaddr with sockaddr_storage to accomodate IPv6 Modified: user/kmacy/head_flowtable_v6/sys/net/flowtable.c user/kmacy/head_flowtable_v6/sys/net/flowtable.h user/kmacy/head_flowtable_v6/sys/net/if_llatbl.c user/kmacy/head_flowtable_v6/sys/net/if_llatbl.h Modified: user/kmacy/head_flowtable_v6/sys/net/flowtable.c ============================================================================== --- user/kmacy/head_flowtable_v6/sys/net/flowtable.c Thu Feb 11 22:51:44 2010 (r203790) +++ user/kmacy/head_flowtable_v6/sys/net/flowtable.c Thu Feb 11 23:56:03 2010 (r203791) @@ -535,7 +535,7 @@ ipv4_flow_lookup_hash_internal( static struct flentry * flowtable_lookup_mbuf4(struct flowtable *ft, struct mbuf *m) { - struct sockaddr ssa, dsa; + struct sockaddr_storage ssa, dsa; uint16_t flags; struct sockaddr_in *dsin, *ssin; @@ -738,7 +738,7 @@ ipv6_flow_lookup_hash_internal( static struct flentry * flowtable_lookup_mbuf6(struct flowtable *ft, struct mbuf *m) { - struct sockaddr ssa, dsa; + struct sockaddr_storage ssa, dsa; struct sockaddr_in6 *dsin6, *ssin6; uint16_t flags; @@ -939,8 +939,9 @@ skip: } int -kern_flowtable_insert(struct flowtable *ft, struct sockaddr *ssa, - struct sockaddr *dsa, struct route *ro, uint32_t fibnum, int flags) +kern_flowtable_insert(struct flowtable *ft, + struct sockaddr_storage *ssa, struct sockaddr_storage *dsa, + struct route *ro, uint32_t fibnum, int flags) { uint32_t key[9], hash; @@ -948,12 +949,12 @@ kern_flowtable_insert(struct flowtable * hash = 0; #ifdef INET - if (ssa->sa_family == AF_INET) + if (ssa->ss_family == AF_INET) hash = ipv4_flow_lookup_hash_internal((struct sockaddr_in *)ssa, (struct sockaddr_in *)dsa, key, flags); #endif #ifdef INET6 - if (ssa->sa_family == AF_INET6) + if (ssa->ss_family == AF_INET6) hash = ipv6_flow_lookup_hash_internal((struct sockaddr_in6 *)ssa, (struct sockaddr_in6 *)dsa, key, flags); #endif @@ -1008,8 +1009,8 @@ flowtable_lookup_mbuf(struct flowtable * } struct flentry * -flowtable_lookup(struct flowtable *ft, struct sockaddr *ssa, - struct sockaddr *dsa, uint32_t fibnum, int flags) +flowtable_lookup(struct flowtable *ft, struct sockaddr_storage *ssa, + struct sockaddr_storage *dsa, uint32_t fibnum, int flags) { uint32_t key[9], hash; struct flentry *fle; @@ -1018,17 +1019,18 @@ flowtable_lookup(struct flowtable *ft, s struct rtentry *rt; struct llentry *lle; struct route sro, *ro; + struct route_in6 sro6; ro = &sro; ro->ro_rt = NULL; ro->ro_lle = NULL; - ro->ro_dst = *dsa; hash = 0; flags |= ft->ft_flags; proto = flags_to_proto(flags); #ifdef INET - if (ssa->sa_family == AF_INET) { + if (ssa->ss_family == AF_INET) { struct sockaddr_in *ssin, *dsin; + memcpy(&ro->ro_dst, &dsa, sizeof(struct sockaddr_in)); dsin = (struct sockaddr_in *)dsa; ssin = (struct sockaddr_in *)ssa; @@ -1040,9 +1042,12 @@ flowtable_lookup(struct flowtable *ft, s } #endif #ifdef INET6 - if (ssa->sa_family == AF_INET6) { + if (ssa->ss_family == AF_INET6) { struct sockaddr_in6 *ssin6, *dsin6; + ro = (struct route *)&sro6; + memcpy(&ro->ro_dst, &dsa, + sizeof(struct sockaddr_in6)); dsin6 = (struct sockaddr_in6 *)dsa; ssin6 = (struct sockaddr_in6 *)ssa; @@ -1107,7 +1112,7 @@ uncached: error = ENETUNREACH; else { struct llentry *lle = NULL; - struct sockaddr *l3addr; + struct sockaddr_storage *l3addr; struct rtentry *rt = ro->ro_rt; struct ifnet *ifp = rt->rt_ifp; @@ -1116,17 +1121,25 @@ uncached: ro->ro_rt = NULL; return (NULL); } - if (rt->rt_flags & RTF_GATEWAY) - l3addr = rt->rt_gateway; - else - l3addr = &ro->ro_dst; #ifdef INET6 - if (ssa->sa_family == AF_INET6) + if (ssa->ss_family == AF_INET6) { + if (rt->rt_flags & RTF_GATEWAY) + l3addr = (struct sockaddr_storage *)rt->rt_gateway; + + else + l3addr = (struct sockaddr_storage *)&ro->ro_dst; llentry_update(&lle, LLTABLE6(ifp), l3addr, ifp); -#endif -#ifdef INET - if (ssa->sa_family == AF_INET) - llentry_update(&lle, LLTABLE(ifp), l3addr, ifp); + } +#endif +#ifdef INET + if (ssa->ss_family == AF_INET) { + if (rt->rt_flags & RTF_GATEWAY) + l3addr = (struct sockaddr_storage *)rt->rt_gateway; + else + l3addr = (struct sockaddr_storage *)&ro->ro_dst; + llentry_update(&lle, LLTABLE(ifp), l3addr, ifp); + } + #endif ro->ro_lle = lle; Modified: user/kmacy/head_flowtable_v6/sys/net/flowtable.h ============================================================================== --- user/kmacy/head_flowtable_v6/sys/net/flowtable.h Thu Feb 11 22:51:44 2010 (r203790) +++ user/kmacy/head_flowtable_v6/sys/net/flowtable.h Thu Feb 11 23:56:03 2010 (r203791) @@ -62,11 +62,11 @@ struct flowtable *flowtable_alloc(char * */ struct flentry *flowtable_lookup_mbuf(struct flowtable *ft, struct mbuf *m, int af); -struct flentry *flowtable_lookup(struct flowtable *ft, struct sockaddr *ssa, - struct sockaddr *dsa, uint32_t fibnum, int flags); +struct flentry *flowtable_lookup(struct flowtable *ft, struct sockaddr_storage *ssa, + struct sockaddr_storage *dsa, uint32_t fibnum, int flags); -int kern_flowtable_insert(struct flowtable *ft, struct sockaddr *ssa, - struct sockaddr *dsa, struct route *ro, uint32_t fibnum, int flags); +int kern_flowtable_insert(struct flowtable *ft, struct sockaddr_storage *ssa, + struct sockaddr_storage *dsa, struct route *ro, uint32_t fibnum, int flags); void flow_invalidate(struct flentry *fl); void flowtable_route_flush(struct flowtable *ft, struct rtentry *rt); Modified: user/kmacy/head_flowtable_v6/sys/net/if_llatbl.c ============================================================================== --- user/kmacy/head_flowtable_v6/sys/net/if_llatbl.c Thu Feb 11 22:51:44 2010 (r203790) +++ user/kmacy/head_flowtable_v6/sys/net/if_llatbl.c Thu Feb 11 23:56:03 2010 (r203791) @@ -117,7 +117,7 @@ llentry_free(struct llentry *lle) */ int llentry_update(struct llentry **llep, struct lltable *lt, - struct sockaddr *dst, struct ifnet *ifp) + struct sockaddr_storage *dst, struct ifnet *ifp) { struct llentry *la; Modified: user/kmacy/head_flowtable_v6/sys/net/if_llatbl.h ============================================================================== --- user/kmacy/head_flowtable_v6/sys/net/if_llatbl.h Thu Feb 11 22:51:44 2010 (r203790) +++ user/kmacy/head_flowtable_v6/sys/net/if_llatbl.h Thu Feb 11 23:56:03 2010 (r203791) @@ -191,7 +191,7 @@ int lltable_sysctl_dumparp(int, struct void llentry_free(struct llentry *); int llentry_update(struct llentry **, struct lltable *, - struct sockaddr *, struct ifnet *); + struct sockaddr_storage *, struct ifnet *); /* * Generic link layer address lookup function.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002112356.o1BNu4X4029030>