if_stf.c (241394) | if_stf.c (241610) |
---|---|
1/* $FreeBSD: head/sys/net/if_stf.c 241394 2012-10-10 08:36:38Z kevlo $ */ | 1/* $FreeBSD: head/sys/net/if_stf.c 241610 2012-10-16 13:37:54Z glebius $ */ |
2/* $KAME: if_stf.c,v 1.73 2001/12/03 11:08:30 keiichi Exp $ */ 3 4/*- 5 * Copyright (C) 2000 WIDE Project. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 112 unchanged lines hidden (view full) --- 122 123SYSCTL_DECL(_net_link); 124static SYSCTL_NODE(_net_link, IFT_STF, stf, CTLFLAG_RW, 0, "6to4 Interface"); 125 126static int stf_route_cache = 1; 127SYSCTL_INT(_net_link_stf, OID_AUTO, route_cache, CTLFLAG_RW, 128 &stf_route_cache, 0, "Caching of IPv4 routes for 6to4 Output"); 129 | 2/* $KAME: if_stf.c,v 1.73 2001/12/03 11:08:30 keiichi Exp $ */ 3 4/*- 5 * Copyright (C) 2000 WIDE Project. 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions --- 112 unchanged lines hidden (view full) --- 122 123SYSCTL_DECL(_net_link); 124static SYSCTL_NODE(_net_link, IFT_STF, stf, CTLFLAG_RW, 0, "6to4 Interface"); 125 126static int stf_route_cache = 1; 127SYSCTL_INT(_net_link_stf, OID_AUTO, route_cache, CTLFLAG_RW, 128 &stf_route_cache, 0, "Caching of IPv4 routes for 6to4 Output"); 129 |
130#define STFNAME "stf" | |
131#define STFUNIT 0 132 133#define IN6_IS_ADDR_6TO4(x) (ntohs((x)->s6_addr16[0]) == 0x2002) 134 135/* 136 * XXX: Return a pointer with 16-bit aligned. Don't cast it to 137 * struct in_addr *; use bcopy() instead. 138 */ --- 7 unchanged lines hidden (view full) --- 146 } __sc_ro46; 147#define sc_ro __sc_ro46.__sc_ro4 148 struct mtx sc_ro_mtx; 149 u_int sc_fibnum; 150 const struct encaptab *encap_cookie; 151}; 152#define STF2IFP(sc) ((sc)->sc_ifp) 153 | 130#define STFUNIT 0 131 132#define IN6_IS_ADDR_6TO4(x) (ntohs((x)->s6_addr16[0]) == 0x2002) 133 134/* 135 * XXX: Return a pointer with 16-bit aligned. Don't cast it to 136 * struct in_addr *; use bcopy() instead. 137 */ --- 7 unchanged lines hidden (view full) --- 145 } __sc_ro46; 146#define sc_ro __sc_ro46.__sc_ro4 147 struct mtx sc_ro_mtx; 148 u_int sc_fibnum; 149 const struct encaptab *encap_cookie; 150}; 151#define STF2IFP(sc) ((sc)->sc_ifp) 152 |
153static const char stfname[] = "stf"; 154 |
|
154/* 155 * Note that mutable fields in the softc are not currently locked. 156 * We do lock sc_ro in stf_output though. 157 */ | 155/* 156 * Note that mutable fields in the softc are not currently locked. 157 * We do lock sc_ro in stf_output though. 158 */ |
158static MALLOC_DEFINE(M_STF, STFNAME, "6to4 Tunnel Interface"); | 159static MALLOC_DEFINE(M_STF, stfname, "6to4 Tunnel Interface"); |
159static const int ip_stf_ttl = 40; 160 161extern struct domain inetdomain; 162struct protosw in_stf_protosw = { 163 .pr_type = SOCK_RAW, 164 .pr_domain = &inetdomain, 165 .pr_protocol = IPPROTO_IPV6, 166 .pr_flags = PR_ATOMIC|PR_ADDR, --- 16 unchanged lines hidden (view full) --- 183static int stf_checkaddr6(struct stf_softc *, struct in6_addr *, 184 struct ifnet *); 185static void stf_rtrequest(int, struct rtentry *, struct rt_addrinfo *); 186static int stf_ioctl(struct ifnet *, u_long, caddr_t); 187 188static int stf_clone_match(struct if_clone *, const char *); 189static int stf_clone_create(struct if_clone *, char *, size_t, caddr_t); 190static int stf_clone_destroy(struct if_clone *, struct ifnet *); | 160static const int ip_stf_ttl = 40; 161 162extern struct domain inetdomain; 163struct protosw in_stf_protosw = { 164 .pr_type = SOCK_RAW, 165 .pr_domain = &inetdomain, 166 .pr_protocol = IPPROTO_IPV6, 167 .pr_flags = PR_ATOMIC|PR_ADDR, --- 16 unchanged lines hidden (view full) --- 184static int stf_checkaddr6(struct stf_softc *, struct in6_addr *, 185 struct ifnet *); 186static void stf_rtrequest(int, struct rtentry *, struct rt_addrinfo *); 187static int stf_ioctl(struct ifnet *, u_long, caddr_t); 188 189static int stf_clone_match(struct if_clone *, const char *); 190static int stf_clone_create(struct if_clone *, char *, size_t, caddr_t); 191static int stf_clone_destroy(struct if_clone *, struct ifnet *); |
191struct if_clone stf_cloner = IFC_CLONE_INITIALIZER(STFNAME, NULL, 0, 192 NULL, stf_clone_match, stf_clone_create, stf_clone_destroy); | 192static struct if_clone *stf_cloner; |
193 194static int 195stf_clone_match(struct if_clone *ifc, const char *name) 196{ 197 int i; 198 199 for(i = 0; stfnames[i] != NULL; i++) { 200 if (strcmp(stfnames[i], name) == 0) --- 30 unchanged lines hidden (view full) --- 231 ifp->if_softc = sc; 232 sc->sc_fibnum = curthread->td_proc->p_fibnum; 233 234 /* 235 * Set the name manually rather then using if_initname because 236 * we don't conform to the default naming convention for interfaces. 237 */ 238 strlcpy(ifp->if_xname, name, IFNAMSIZ); | 193 194static int 195stf_clone_match(struct if_clone *ifc, const char *name) 196{ 197 int i; 198 199 for(i = 0; stfnames[i] != NULL; i++) { 200 if (strcmp(stfnames[i], name) == 0) --- 30 unchanged lines hidden (view full) --- 231 ifp->if_softc = sc; 232 sc->sc_fibnum = curthread->td_proc->p_fibnum; 233 234 /* 235 * Set the name manually rather then using if_initname because 236 * we don't conform to the default naming convention for interfaces. 237 */ 238 strlcpy(ifp->if_xname, name, IFNAMSIZ); |
239 ifp->if_dname = ifc->ifc_name; | 239 ifp->if_dname = stfname; |
240 ifp->if_dunit = IF_DUNIT_NONE; 241 242 mtx_init(&(sc)->sc_ro_mtx, "stf ro", NULL, MTX_DEF); 243 sc->encap_cookie = encap_attach_func(AF_INET, IPPROTO_IPV6, 244 stf_encapcheck, &in_stf_protosw, sc); 245 if (sc->encap_cookie == NULL) { 246 if_printf(ifp, "attach failed\n"); 247 free(sc, M_STF); --- 33 unchanged lines hidden (view full) --- 281stfmodevent(mod, type, data) 282 module_t mod; 283 int type; 284 void *data; 285{ 286 287 switch (type) { 288 case MOD_LOAD: | 240 ifp->if_dunit = IF_DUNIT_NONE; 241 242 mtx_init(&(sc)->sc_ro_mtx, "stf ro", NULL, MTX_DEF); 243 sc->encap_cookie = encap_attach_func(AF_INET, IPPROTO_IPV6, 244 stf_encapcheck, &in_stf_protosw, sc); 245 if (sc->encap_cookie == NULL) { 246 if_printf(ifp, "attach failed\n"); 247 free(sc, M_STF); --- 33 unchanged lines hidden (view full) --- 281stfmodevent(mod, type, data) 282 module_t mod; 283 int type; 284 void *data; 285{ 286 287 switch (type) { 288 case MOD_LOAD: |
289 if_clone_attach(&stf_cloner); | 289 stf_cloner = if_clone_advanced(stfname, 0, stf_clone_match, 290 stf_clone_create, stf_clone_destroy); |
290 break; 291 case MOD_UNLOAD: | 291 break; 292 case MOD_UNLOAD: |
292 if_clone_detach(&stf_cloner); | 293 if_clone_detach(stf_cloner); |
293 break; 294 default: 295 return (EOPNOTSUPP); 296 } 297 298 return (0); 299} 300 --- 558 unchanged lines hidden --- | 294 break; 295 default: 296 return (EOPNOTSUPP); 297 } 298 299 return (0); 300} 301 --- 558 unchanged lines hidden --- |