From owner-p4-projects@FreeBSD.ORG Mon Nov 3 10:57:57 2008 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D42C21065680; Mon, 3 Nov 2008 10:57:57 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 97380106567C for ; Mon, 3 Nov 2008 10:57:57 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 845898FC12 for ; Mon, 3 Nov 2008 10:57:57 +0000 (UTC) (envelope-from gk@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id mA3Avv4J048346 for ; Mon, 3 Nov 2008 10:57:57 GMT (envelope-from gk@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id mA3Avv6N048342 for perforce@freebsd.org; Mon, 3 Nov 2008 10:57:57 GMT (envelope-from gk@FreeBSD.org) Date: Mon, 3 Nov 2008 10:57:57 GMT Message-Id: <200811031057.mA3Avv6N048342@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to gk@FreeBSD.org using -f From: Gleb Kurtsou To: Perforce Change Reviews Cc: Subject: PERFORCE change 152405 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 Nov 2008 10:57:58 -0000 http://perforce.freebsd.org/chv.cgi?CH=152405 Change 152405 by gk@gk_h1 on 2008/11/03 10:57:20 IFC Affected files ... .. //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifconfig.8#6 integrate .. //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifconfig.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifieee80211.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifvlan.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/regdomain.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sbin-ipfw/ipfw.8#8 integrate .. //depot/projects/soc2008/gk_l2filter/sbin-ipfw/ipfw2.c#11 integrate .. //depot/projects/soc2008/gk_l2filter/share-man4/if_bridge.4#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/bpf.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/bridgestp.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/bsd_comp.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_arcsubr.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_atmsubr.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_bridge.c#10 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_clone.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_clone.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_ef.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_ethersubr.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_faith.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_fddisubr.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_fwsubr.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_gif.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_gif.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_gre.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_iso88025subr.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_lagg.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_loop.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_mib.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_ppp.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_sl.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_spppsubr.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_stf.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_tap.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_tap.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_tun.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_var.h#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/if_vlan.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/ppp_deflate.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/raw_cb.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/raw_usrreq.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/route.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/route.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/rtsock.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-net/vnet.h#1 branch .. //depot/projects/soc2008/gk_l2filter/sys-netinet/if_ether.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/igmp.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in_gif.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in_mcast.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in_pcb.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in_pcb.h#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in_rmx.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/in_var.h#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip6.h#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_carp.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_divert.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_dummynet.h#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_fastfwd.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_fw.h#12 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_fw2.c#17 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_fw_nat.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_icmp.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_input.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_ipsec.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_mroute.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/ip_options.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/raw_ip.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_crc32.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_os_bsd.h#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_output.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_sysctl.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_timer.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_timer.h#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_uio.h#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctp_usrreq.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/sctputil.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_debug.c#2 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_hostcache.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_input.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_offload.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_output.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_reass.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_sack.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_subr.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_syncache.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_timer.c#5 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_timewait.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_usrreq.c#4 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/tcp_var.h#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/udp_usrreq.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-netinet/vinet.h#1 branch .. //depot/projects/soc2008/gk_l2filter/sys-pf/net/pf.c#10 integrate .. //depot/projects/soc2008/gk_l2filter/sys-pf/net/pf_if.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-pf/net/pf_ioctl.c#6 integrate .. //depot/projects/soc2008/gk_l2filter/sys-pf/net/pf_subr.c#3 integrate .. //depot/projects/soc2008/gk_l2filter/sys-pf/net/pfvar.h#9 integrate Differences ... ==== //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifconfig.8#6 (text+ko) ==== @@ -26,9 +26,9 @@ .\" SUCH DAMAGE. .\" .\" From: @(#)ifconfig.8 8.3 (Berkeley) 1/5/94 -.\" $FreeBSD: src/sbin/ifconfig/ifconfig.8,v 1.153 2008/08/28 22:13:44 jfv Exp $ +.\" $FreeBSD: src/sbin/ifconfig/ifconfig.8,v 1.156 2008/10/19 09:45:29 keramida Exp $ .\" -.Dd August 27, 2008 +.Dd October 19, 2008 .Dt IFCONFIG 8 .Os .Sh NAME @@ -106,7 +106,7 @@ That is, one can specify an address like .Li 192.168.0.1/16 . .Pp -For +For the .Dq inet6 family, it is also possible to specify the prefix length using the slash notation, like @@ -1263,18 +1263,19 @@ .Cm HTCAP (station supports 802.11n/HT communication), .Cm ATH -(station supoprts Atheros protocol extensions), +(station supports Atheros protocol extensions), .Cm VEN (station supports unknown vendor-specific extensions). If the .Fl v flag is used all the information elements and their contents will be shown. -Specifying The +Specifying the .Fl v flag also enables display of long SSIDs. +The .Cm list ap -is another way of requesting this information. +command is another way of requesting this information. .It Cm list sta When operating as an access point display the stations that are currently associated. @@ -1323,7 +1324,7 @@ By default information elements received from associated stations are displayed in a short form; the .Fl v -flag causes this information to be displayed symbolicaly. +flag causes this information to be displayed symbolically. .It Cm list wme Display the current channel parameters to use when operating in WME mode. If the @@ -1417,6 +1418,13 @@ .Cm outdoor , and .Cm anywhere . +.It Cm rifs +Enable use of Reduced InterFrame Spacing (RIFS) when operating in 802.11n +on an HT channel. +Note that RIFS must be supported by both the station and access point +for it to be used. +To disable RIFS use +.Fl rifs . .It Cm roam:rate Ar rate Set the threshold for controlling roaming when operating in a BSS. The @@ -1518,6 +1526,23 @@ NB: this currently enables Short GI on both HT40 and HT20 channels. To disable Short GI use .Fl shortgi . +.It Cm smps +Enable use of Static Spatial Multiplexing Power Save (SMPS) +when operating in 802.11n. +A station operating with Static SMPS maintains only a single +receive chain active (this can significantly reduce power consumption). +To disable SMPS use +.Fl smps . +.It Cm smpsdyn +Enable use of Dynamic Spatial Multiplexing Power Save (SMPS) +when operating in 802.11n. +A station operating with Dynamic SMPS maintains only a single +receive chain active but switches to multiple receive chains when it +receives an RTS frame (this can significantly reduce power consumption). +Note that stations cannot distinguish between RTS/CTS intended to +enable multiple receive chains and those used for other purposes. +To disable SMPS use +.Fl smps . .It Cm ssid Ar ssid Set the desired Service Set Identifier (aka network name). The SSID is a string up to 32 characters ==== //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifconfig.c#5 (text+ko) ==== @@ -38,7 +38,7 @@ static char sccsid[] = "@(#)ifconfig.c 8.2 (Berkeley) 2/16/94"; #endif static const char rcsid[] = - "$FreeBSD: src/sbin/ifconfig/ifconfig.c,v 1.139 2008/08/28 22:13:44 jfv Exp $"; + "$FreeBSD: src/sbin/ifconfig/ifconfig.c,v 1.140 2008/09/29 16:27:32 sam Exp $"; #endif /* not lint */ #include @@ -392,14 +392,21 @@ } static const struct cmd * -cmd_lookup(const char *name) +cmd_lookup(const char *name, int iscreate) { #define N(a) (sizeof(a)/sizeof(a[0])) const struct cmd *p; for (p = cmds; p != NULL; p = p->c_next) - if (strcmp(name, p->c_name) == 0) - return p; + if (strcmp(name, p->c_name) == 0) { + if (iscreate) { + if (p->c_iscloneop) + return p; + } else { + if (!p->c_iscloneop) + return p; + } + } return NULL; #undef N } @@ -437,6 +444,7 @@ ifconfig(int argc, char *const *argv, int iscreate, const struct afswtch *afp) { const struct afswtch *nafp; + const struct cmd *p; struct callback *cb; int s; @@ -452,9 +460,38 @@ err(1, "socket(family %u,SOCK_DGRAM", ifr.ifr_addr.sa_family); while (argc > 0) { - const struct cmd *p; - - p = cmd_lookup(*argv); + p = cmd_lookup(*argv, iscreate); + if (iscreate && p == NULL) { + /* + * Push the clone create callback so the new + * device is created and can be used for any + * remaining arguments. + */ + cb = callbacks; + if (cb == NULL) + errx(1, "internal error, no callback"); + callbacks = cb->cb_next; + cb->cb_func(s, cb->cb_arg); + iscreate = 0; + /* + * Handle any address family spec that + * immediately follows and potentially + * recreate the socket. + */ + nafp = af_getbyname(*argv); + if (nafp != NULL) { + argc--, argv++; + if (nafp != afp) { + close(s); + afp = nafp; + goto top; + } + } + /* + * Look for a normal parameter. + */ + continue; + } if (p == NULL) { /* * Not a recognized command, choose between setting @@ -463,33 +500,6 @@ p = (setaddr ? &setifdstaddr_cmd : &setifaddr_cmd); } if (p->c_u.c_func || p->c_u.c_func2) { - if (iscreate && !p->c_iscloneop) { - /* - * Push the clone create callback so the new - * device is created and can be used for any - * remaining arguments. - */ - cb = callbacks; - if (cb == NULL) - errx(1, "internal error, no callback"); - callbacks = cb->cb_next; - cb->cb_func(s, cb->cb_arg); - iscreate = 0; - /* - * Handle any address family spec that - * immediately follows and potentially - * recreate the socket. - */ - nafp = af_getbyname(*argv); - if (nafp != NULL) { - argc--, argv++; - if (nafp != afp) { - close(s); - afp = nafp; - goto top; - } - } - } if (p->c_parameter == NEXTARG) { if (argv[1] == NULL) errx(1, "'%s' requires argument", ==== //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifieee80211.c#5 (text+ko) ==== @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sbin/ifconfig/ifieee80211.c,v 1.57 2008/08/14 03:49:14 thompsa Exp $ + * $FreeBSD: src/sbin/ifconfig/ifieee80211.c,v 1.59 2008/09/22 00:30:26 sam Exp $ */ /*- @@ -112,6 +112,11 @@ #define IEEE80211_NODE_HTCOMPAT 0x0080 /* HT setup w/ vendor OUI's */ #define IEEE80211_NODE_WPS 0x0100 /* WPS association */ #define IEEE80211_NODE_TSN 0x0200 /* TSN association */ +#define IEEE80211_NODE_AMPDU_RX 0x0400 /* AMPDU rx enabled */ +#define IEEE80211_NODE_AMPDU_TX 0x0800 /* AMPDU tx enabled */ +#define IEEE80211_NODE_MIMO_PS 0x1000 /* MIMO power save enabled */ +#define IEEE80211_NODE_MIMO_RTS 0x2000 /* send RTS in MIMO PS */ +#define IEEE80211_NODE_RIFS 0x4000 /* RIFS enabled */ #endif #define MAXCOL 78 @@ -1598,7 +1603,7 @@ { int v; - if (isanyarg(val)) + if (isanyarg(val) || strcasecmp(val, "na") == 0) v = IEEE80211_HTCAP_MPDUDENSITY_NA; else switch ((int)(atof(val)*4)) { case 0: @@ -1695,6 +1700,18 @@ set80211(s, IEEE80211_IOC_DOTD, d, 0, NULL); } +static void +set80211smps(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_SMPS, d, 0, NULL); +} + +static void +set80211rifs(const char *val, int d, int s, const struct afswtch *rafp) +{ + set80211(s, IEEE80211_IOC_RIFS, d, 0, NULL); +} + static int regdomain_sort(const void *a, const void *b) { @@ -2093,7 +2110,18 @@ if (flags & IEEE80211_NODE_WPS) *cp++ = 'W'; if (flags & IEEE80211_NODE_TSN) + *cp++ = 'N'; + if (flags & IEEE80211_NODE_AMPDU_TX) *cp++ = 'T'; + if (flags & IEEE80211_NODE_AMPDU_RX) + *cp++ = 'R'; + if (flags & IEEE80211_NODE_MIMO_PS) { + *cp++ = 'M'; + if (flags & IEEE80211_NODE_MIMO_RTS) + *cp++ = '+'; + } + if (flags & IEEE80211_NODE_RIFS) + *cp++ = 'I'; *cp = '\0'; return flagstring; } @@ -4048,7 +4076,7 @@ switch (val) { case IEEE80211_HTCAP_MPDUDENSITY_NA: if (verbose) - LINE_CHECK("ampdudensity -"); + LINE_CHECK("ampdudensity NA"); break; case IEEE80211_HTCAP_MPDUDENSITY_025: LINE_CHECK("ampdudensity .25"); @@ -4111,6 +4139,20 @@ else if (verbose) LINE_CHECK("-puren"); } + if (get80211val(s, IEEE80211_IOC_SMPS, &val) != -1) { + if (val == IEEE80211_HTCAP_SMPS_DYNAMIC) + LINE_CHECK("smpsdyn"); + else if (val == IEEE80211_HTCAP_SMPS_ENA) + LINE_CHECK("smps"); + else if (verbose) + LINE_CHECK("-smps"); + } + if (get80211val(s, IEEE80211_IOC_RIFS, &val) != -1) { + if (val) + LINE_CHECK("rifs"); + else if (verbose) + LINE_CHECK("-rifs"); + } } if (get80211val(s, IEEE80211_IOC_WME, &wme) != -1) { @@ -4593,6 +4635,11 @@ DEF_CMD("-ht40", 0, set80211htconf), DEF_CMD("ht", 3, set80211htconf), /* NB: 20+40 */ DEF_CMD("-ht", 0, set80211htconf), + DEF_CMD("rifs", 1, set80211rifs), + DEF_CMD("-rifs", 0, set80211rifs), + DEF_CMD("smps", IEEE80211_HTCAP_SMPS_ENA, set80211smps), + DEF_CMD("smpsdyn", IEEE80211_HTCAP_SMPS_DYNAMIC, set80211smps), + DEF_CMD("-smps", IEEE80211_HTCAP_SMPS_OFF, set80211smps), /* XXX for testing */ DEF_CMD_ARG("chanswitch", set80211chanswitch), ==== //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/ifvlan.c#3 (text+ko) ==== @@ -56,7 +56,7 @@ #ifndef lint static const char rcsid[] = - "$FreeBSD: src/sbin/ifconfig/ifvlan.c,v 1.14 2008/08/28 22:13:44 jfv Exp $"; + "$FreeBSD: src/sbin/ifconfig/ifvlan.c,v 1.15 2008/10/02 20:03:41 sam Exp $"; #endif #define NOTAG ((u_short) -1) @@ -174,6 +174,9 @@ static struct cmd vlan_cmds[] = { DEF_CLONE_CMD_ARG("vlan", setvlantag), DEF_CLONE_CMD_ARG("vlandev", setvlandev), + /* NB: non-clone cmds */ + DEF_CMD_ARG("vlan", setvlantag), + DEF_CMD_ARG("vlandev", setvlandev), /* XXX For compatibility. Should become DEF_CMD() some day. */ DEF_CMD_OPTARG("-vlandev", unsetvlandev), DEF_CMD("vlanmtu", IFCAP_VLAN_MTU, setifcap), ==== //depot/projects/soc2008/gk_l2filter/sbin-ifconfig/regdomain.c#3 (text+ko) ==== @@ -23,7 +23,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef lint -static const char rcsid[] = "$FreeBSD: src/sbin/ifconfig/regdomain.c,v 1.3 2008/08/09 11:14:05 des Exp $"; +static const char rcsid[] = "$FreeBSD: src/sbin/ifconfig/regdomain.c,v 1.4 2008/09/21 22:16:03 sam Exp $"; #endif /* not lint */ #include @@ -390,7 +390,7 @@ struct freqband *fp; struct netband *nb; const void *id; - int i; + int i, errors; memset(rdp, 0, sizeof(struct regdata)); mt = calloc(1, sizeof(struct mystate)); @@ -415,6 +415,8 @@ if (rdp->ident == NULL) return ENOMEM; free(mt); + + errors = 0; i = 0; LIST_FOREACH(dp, &rdp->domains, next) { rdp->ident[i].id = dp->name; @@ -440,26 +442,71 @@ if (dp->cc != NULL) { id = dp->cc; dp->cc = findid(rdp, id, COUNTRY); + if (dp->cc == NULL) { + warnx("undefined country \"%s\"", + __DECONST(char *, id)); + errors++; + } free(__DECONST(char *, id)); } - LIST_FOREACH(nb, &dp->bands_11b, next) - nb->band = findid(rdp, nb->band, FREQBAND); - LIST_FOREACH(nb, &dp->bands_11g, next) - nb->band = findid(rdp, nb->band, FREQBAND); - LIST_FOREACH(nb, &dp->bands_11a, next) - nb->band = findid(rdp, nb->band, FREQBAND); - LIST_FOREACH(nb, &dp->bands_11ng, next) - nb->band = findid(rdp, nb->band, FREQBAND); - LIST_FOREACH(nb, &dp->bands_11na, next) - nb->band = findid(rdp, nb->band, FREQBAND); + LIST_FOREACH(nb, &dp->bands_11b, next) { + id = findid(rdp, nb->band, FREQBAND); + if (id == NULL) { + warnx("undefined 11b band \"%s\"", + __DECONST(char *, nb->band)); + errors++; + } + nb->band = id; + } + LIST_FOREACH(nb, &dp->bands_11g, next) { + id = findid(rdp, nb->band, FREQBAND); + if (id == NULL) { + warnx("undefined 11g band \"%s\"", + __DECONST(char *, nb->band)); + errors++; + } + nb->band = id; + } + LIST_FOREACH(nb, &dp->bands_11a, next) { + id = findid(rdp, nb->band, FREQBAND); + if (id == NULL) { + warnx("undefined 11a band \"%s\"", + __DECONST(char *, nb->band)); + errors++; + } + nb->band = id; + } + LIST_FOREACH(nb, &dp->bands_11ng, next) { + id = findid(rdp, nb->band, FREQBAND); + if (id == NULL) { + warnx("undefined 11ng band \"%s\"", + __DECONST(char *, nb->band)); + errors++; + } + nb->band = id; + } + LIST_FOREACH(nb, &dp->bands_11na, next) { + id = findid(rdp, nb->band, FREQBAND); + if (id == NULL) { + warnx("undefined 11na band \"%s\"", + __DECONST(char *, nb->band)); + errors++; + } + nb->band = id; + } } LIST_FOREACH(cp, &rdp->countries, next) { id = cp->rd; cp->rd = findid(rdp, id, DOMAIN); + if (cp->rd == NULL) { + warnx("undefined country \"%s\"", + __DECONST(char *, id)); + errors++; + } free(__DECONST(char *, id)); } - return 0; + return errors ? EINVAL : 0; } static void ==== //depot/projects/soc2008/gk_l2filter/sbin-ipfw/ipfw.8#8 (text+ko) ==== @@ -1,7 +1,7 @@ .\" -.\" $FreeBSD: src/sbin/ipfw/ipfw.8,v 1.216 2008/08/27 15:30:09 ivoras Exp $ +.\" $FreeBSD: src/sbin/ipfw/ipfw.8,v 1.217 2008/09/27 15:09:00 rik Exp $ .\" -.Dd November 26, 2007 +.Dd September 27, 2008 .Dt IPFW 8 .Os .Sh NAME @@ -49,9 +49,13 @@ .Nm .Cm table Ar number Cm delete Ar addr Ns Op / Ns Ar masklen .Nm -.Cm table Ar number Cm flush +.Cm table +.Brq Ar number | all +.Cm flush .Nm -.Cm table Ar number Cm list +.Cm table +.Brq Ar number | all +.Cm list .Pp .Nm .Brq Cm pipe | queue @@ -2306,6 +2310,11 @@ .It Va net.inet.ip.fw.debug : No 1 Controls debugging messages produced by .Nm . +.It Va net.inet.ip.fw.default_rule : No 65535 +The default rule number (read-only). +By the design of +.Nm , the default rule is the last one, so its number +can also serve as the highest number allowed for a rule. .It Va net.inet.ip.fw.dyn_buckets : No 256 The number of buckets in the hash table for dynamic rules. Must be a power of 2, up to 65536. @@ -2359,6 +2368,8 @@ node is not passed though the firewall again. Otherwise, after an action, the packet is reinjected into the firewall at the next rule. +.It Va net.inet.ip.fw.tables_max : No 128 +Maximum number of tables (read-only). .It Va net.inet.ip.fw.verbose : No 1 Enables verbose messages. .It Va net.inet.ip.fw.verbose_limit : No 0 ==== //depot/projects/soc2008/gk_l2filter/sbin-ipfw/ipfw2.c#11 (text+ko) ==== @@ -17,7 +17,7 @@ * * NEW command line interface for IP firewall facility * - * $FreeBSD: src/sbin/ipfw/ipfw2.c,v 1.120 2008/05/10 15:02:56 julian Exp $ + * $FreeBSD: src/sbin/ipfw/ipfw2.c,v 1.132 2008/10/14 17:59:39 maxim Exp $ */ #include @@ -2499,7 +2499,7 @@ rulenum = atoi(av[0]); new_set = atoi(av[2]); if (!isdigit(*(av[0])) || (cmd == 3 && rulenum > RESVD_SET) || - (cmd == 2 && rulenum == 65535) ) + (cmd == 2 && rulenum == IPFW_DEFAULT_RULE) ) errx(EX_DATAERR, "invalid source number %s\n", av[0]); if (!isdigit(*(av[2])) || new_set > RESVD_SET) errx(EX_DATAERR, "invalid dest. set %s\n", av[1]); @@ -2623,7 +2623,7 @@ * need to scan the list to count them. */ for (nstat = 1, r = data, lim = (char *)data + nbytes; - r->rulenum < 65535 && (char *)r < lim; + r->rulenum < IPFW_DEFAULT_RULE && (char *)r < lim; ++nstat, r = NEXT(r) ) ; /* nothing */ @@ -2791,6 +2791,7 @@ "set [disable N... enable N...] | move [rule] X to Y | swap X Y | show\n" "set N {show|list|zero|resetlog|delete} [N{,N}] | flush\n" "table N {add ip[/bits] [ether ETHERADDR] [value] | delete ip[/bits] | flush | list}\n" +"table all {flush | list}\n" "\n" "RULE-BODY: check-state [PARAMS] | ACTION [PARAMS] ADDR [OPTION_LIST]\n" "ACTION: check-state | allow | count | deny | unreach{,6} CODE |\n" @@ -3642,7 +3643,7 @@ char **av, *sep; /* Token separator. */ /* Temporary buffer used to hold server pool ip's. */ char tmp_spool_buf[NAT_BUF_LEN]; - int ac, i, space, lsnat; + int ac, space, lsnat; struct cfg_redir *r; struct cfg_spool *tmp; @@ -3861,7 +3862,7 @@ int *_ac, char ***_av) { char **av; - int ac, i, space; + int ac, space; struct protoent *protoent; struct cfg_redir *r; @@ -4048,7 +4049,6 @@ config_nat(int ac, char **av) { struct cfg_nat *n; /* Nat instance configuration. */ - struct in_addr ip; int i, len, off, tok; char *id, buf[NAT_BUF_LEN]; /* Buffer for serialized data. */ @@ -5108,7 +5108,8 @@ if (have_tag) errx(EX_USAGE, "tag and untag cannot be " "specified more than once"); - GET_UINT_ARG(tag, 1, 65534, i, rule_action_params); + GET_UINT_ARG(tag, 1, IPFW_DEFAULT_RULE - 1, i, + rule_action_params); have_tag = cmd; fill_cmd(cmd, O_TAG, (i == TOK_TAG) ? 0: F_NOT, tag); ac--; av++; @@ -5584,8 +5585,8 @@ if (c->limit_mask == 0) errx(EX_USAGE, "limit: missing limit mask"); - GET_UINT_ARG(c->conn_limit, 1, 65534, TOK_LIMIT, - rule_options); + GET_UINT_ARG(c->conn_limit, 1, IPFW_DEFAULT_RULE - 1, + TOK_LIMIT, rule_options); ac--; av++; break; @@ -5727,8 +5728,8 @@ else { uint16_t tag; - GET_UINT_ARG(tag, 1, 65534, TOK_TAGGED, - rule_options); + GET_UINT_ARG(tag, 1, IPFW_DEFAULT_RULE - 1, + TOK_TAGGED, rule_options); fill_cmd(cmd, O_TAGGED, 0, tag); } ac--; av++; @@ -5965,30 +5966,57 @@ free(av); } +static void table_list(ipfw_table_entry ent, int need_header); + /* * This one handles all table-related commands * ipfw table N add addr[/masklen] [value] * ipfw table N delete addr[/masklen] - * ipfw table N flush - * ipfw table N list + * ipfw table {N | all} flush + * ipfw table {N | all} list */ static void table_handler(int ac, char *av[]) { ipfw_table_entry ent; - ipfw_table *tbl; int do_add; + int is_all; + size_t len; char *p; - socklen_t l; uint32_t a; + uint32_t tables_max; + + len = sizeof(tables_max); + if (sysctlbyname("net.inet.ip.fw.tables_max", &tables_max, &len, + NULL, 0) == -1) { +#ifdef IPFW_TABLES_MAX + warn("Warn: Failed to get the max tables number via sysctl. " + "Using the compiled in defaults. \nThe reason was"); + tables_max = IPFW_TABLES_MAX; +#else + errx(1, "Failed sysctlbyname(\"net.inet.ip.fw.tables_max\")"); +#endif + } ac--; av++; if (ac && isdigit(**av)) { ent.tbl = atoi(*av); + is_all = 0; ac--; av++; + } else if (ac && _substrcmp(*av, "all") == 0) { + ent.tbl = 0; + is_all = 1; + ac--; av++; } else + errx(EX_USAGE, "table number or 'all' keyword required"); + if (ent.tbl >= tables_max) + errx(EX_USAGE, "The table number exceeds the maximum allowed " + "value (%d)", tables_max - 1); + NEED1("table needs command"); + if (is_all && _substrcmp(*av, "list") != 0 + && _substrcmp(*av, "flush") != 0) errx(EX_USAGE, "table number required"); - NEED1("table needs command"); + if (_substrcmp(*av, "add") == 0 || _substrcmp(*av, "delete") == 0) { do_add = **av == 'a'; @@ -6043,66 +6071,95 @@ } } } else if (_substrcmp(*av, "flush") == 0) { - if (do_cmd(IP_FW_TABLE_FLUSH, &ent.tbl, sizeof(ent.tbl)) < 0) - err(EX_OSERR, "setsockopt(IP_FW_TABLE_FLUSH)"); + a = is_all ? tables_max : (ent.tbl + 1); + do { + if (do_cmd(IP_FW_TABLE_FLUSH, &ent.tbl, + sizeof(ent.tbl)) < 0) + err(EX_OSERR, "setsockopt(IP_FW_TABLE_FLUSH)"); + } while (++ent.tbl < a); } else if (_substrcmp(*av, "list") == 0) { - a = ent.tbl; - l = sizeof(a); - if (do_cmd(IP_FW_TABLE_GETSIZE, &a, (uintptr_t)&l) < 0) - err(EX_OSERR, "getsockopt(IP_FW_TABLE_GETSIZE)"); - l = sizeof(*tbl) + a * sizeof(ipfw_table_entry); - tbl = malloc(l); - if (tbl == NULL) - err(EX_OSERR, "malloc"); - tbl->tbl = ent.tbl; - if (do_cmd(IP_FW_TABLE_LIST, tbl, (uintptr_t)&l) < 0) - err(EX_OSERR, "getsockopt(IP_FW_TABLE_LIST)"); - for (a = 0; a < tbl->cnt; a++) { - unsigned int tval; - char tval_buf[128]; - char tether_buf[128]; - tval = tbl->ent[a].value; - if (do_value_as_ip) { - /* inet_ntoa expects network order */ - tval = htonl(tval); - strlcpy(tval_buf, inet_ntoa(*(struct in_addr *) - &tval), sizeof(tval_buf)); - } else { - snprintf(tval_buf, sizeof(tval_buf), "%u", tval); - } - if (tbl->ent[a].ether_addr.flags & IPFW_EA_CHECK) { - uint8_t *x = (uint8_t *)&tbl->ent[a].ether_addr; - snprintf(tether_buf, sizeof(tether_buf), "ether %02x:%02x:%02x:%02x:%02x:%02x ", - x[0], x[1], x[2], x[3], x[4], x[5]); - } else { - tether_buf[0] = 0; - } + a = is_all ? tables_max : (ent.tbl + 1); + do { + table_list(ent, is_all); + } while (++ent.tbl < a); + } else + errx(EX_USAGE, "invalid table command %s", *av); +} + +static void +table_list(ipfw_table_entry ent, int need_header) +{ + ipfw_table *tbl; + socklen_t l; + uint32_t a; + + a = ent.tbl; + l = sizeof(a); + if (do_cmd(IP_FW_TABLE_GETSIZE, &a, (uintptr_t)&l) < 0) + err(EX_OSERR, "getsockopt(IP_FW_TABLE_GETSIZE)"); + + /* If a is zero we have nothing to do, the table is empty. */ + if (a == 0) + return; - printf("%s/%u %s%s\n", - inet_ntoa(*(struct in_addr *)&tbl->ent[a].addr), - tbl->ent[a].masklen, tether_buf, tval_buf); + l = sizeof(*tbl) + a * sizeof(ipfw_table_entry); + tbl = malloc(l); + if (tbl == NULL) + err(EX_OSERR, "malloc"); + tbl->tbl = ent.tbl; + if (do_cmd(IP_FW_TABLE_LIST, tbl, (uintptr_t)&l) < 0) + err(EX_OSERR, "getsockopt(IP_FW_TABLE_LIST)"); + if (tbl->cnt && need_header) + printf("---table(%d)---\n", tbl->tbl); + for (a = 0; a < tbl->cnt; a++) { + unsigned int tval; + char tval_buf[128]; + char tether_buf[128]; + tval = tbl->ent[a].value; + if (do_value_as_ip) { + /* inet_ntoa expects network order */ + tval = htonl(tval); + strlcpy(tval_buf, inet_ntoa(*(struct in_addr *) + &tval), sizeof(tval_buf)); + } else { + snprintf(tval_buf, sizeof(tval_buf), "%u", tval); + } + if (tbl->ent[a].ether_addr.flags & IPFW_EA_CHECK) { + uint8_t *x = (uint8_t *)&tbl->ent[a].ether_addr; + snprintf(tether_buf, sizeof(tether_buf), "ether %02x:%02x:%02x:%02x:%02x:%02x ", + x[0], x[1], x[2], x[3], x[4], x[5]); + } else { + tether_buf[0] = 0; } - } else - errx(EX_USAGE, "invalid table command %s", *av); + + printf("%s/%u %s%s\n", + inet_ntoa(*(struct in_addr *)&tbl->ent[a].addr), + tbl->ent[a].masklen, tether_buf, tval_buf); + } + free(tbl); } static void -show_nat(int ac, char **av) { +show_nat(int ac, char **av) +{ struct cfg_nat *n; struct cfg_redir *e; int cmd, i, nbytes, do_cfg, do_rule, frule, lrule, nalloc, size; int nat_cnt, redir_cnt, r; uint8_t *data, *p; - char **lav, *endptr; + char *endptr; do_rule = 0; nalloc = 1024; size = 0; data = NULL; frule = 0; - lrule = 65535; /* max ipfw rule number */ + lrule = IPFW_DEFAULT_RULE; /* max ipfw rule number */ ac--; av++; + if (test_only) + return; + /* Parse parameters. */ for (cmd = IP_FW_NAT_GET_LOG, do_cfg = 0; ac != 0; ac--, av++) { if (!strncmp(av[0], "config", strlen(av[0]))) { ==== //depot/projects/soc2008/gk_l2filter/share-man4/if_bridge.4#4 (text+ko) ==== @@ -33,7 +33,7 @@ .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man4/if_bridge.4,v 1.31 2008/08/04 23:16:07 thompsa Exp $ +.\" $FreeBSD: src/share/man/man4/if_bridge.4,v 1.32 2008/09/08 03:28:26 thompsa Exp $ .\" .Dd September 17, 2007 .Dt IF_BRIDGE 4 @@ -92,6 +92,22 @@ The address can be changed by assigning the desired link address using .Xr ifconfig 8 . .Pp +If +.Xr sysctl 8 +node +.Va net.link.bridge.inherit_mac +has non-zero value, newly created bridge will inherit MAC address +from its first member instead of choosing random link-level address. +This will provide more predictable bridge MAC without any +additional configuration, but currently this feature is known +to break some L2 protocols, for example PPPoE that is provided +by +.Xr ng_pppoe 4 +and +.Xr ppp 8 . +Now this feature is considered as experimental and is turned off +by-default. +.Pp A bridge can be used to provide several services, such as a simple 802.11-to-Ethernet bridge for wireless hosts, and traffic isolation. .Pp ==== //depot/projects/soc2008/gk_l2filter/sys-net/bpf.c#6 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/net/bpf.c,v 1.201 2008/08/29 20:34:06 jkim Exp $"); +__FBSDID("$FreeBSD: src/sys/net/bpf.c,v 1.202 2008/10/23 15:53:51 des Exp $"); #include "opt_bpf.h" #include "opt_mac.h" @@ -619,7 +619,7 @@ struct bpf_d *d; int error; - MALLOC(d, struct bpf_d *, sizeof(*d), M_BPF, M_WAITOK | M_ZERO); + d = malloc(sizeof(*d), M_BPF, M_WAITOK | M_ZERO); error = devfs_set_cdevpriv(d, bpf_dtor); if (error != 0) { free(d, M_BPF); ==== //depot/projects/soc2008/gk_l2filter/sys-net/bridgestp.c#3 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/net/bridgestp.c,v 1.41 2008/08/17 23:27:27 bz Exp $"); +__FBSDID("$FreeBSD: src/sys/net/bridgestp.c,v 1.42 2008/10/02 15:37:58 zec Exp $"); #include #include @@ -2017,6 +2017,7 @@ void bstp_reinit(struct bstp_state *bs) { + INIT_VNET_NET(curvnet); struct bstp_port *bp; struct ifnet *ifp, *mif; u_char *e_addr; ==== //depot/projects/soc2008/gk_l2filter/sys-net/bsd_comp.c#2 (text+ko) ==== @@ -37,7 +37,7 @@ /* * This version is for use with mbufs on BSD-derived systems. * - * $FreeBSD: src/sys/net/bsd_comp.c,v 1.25 2007/10/24 19:03:57 rwatson Exp $ >>> TRUNCATED FOR MAIL (1000 lines) <<<