svn commit: r203791 - user/kmacy/head_flowtable_v6/sys/net
Kip Macy
kmacy at FreeBSD.org
Thu Feb 11 23:56:04 UTC 2010
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.
More information about the svn-src-user
mailing list