Deleted Added
full compact
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 ---