Date: Mon, 15 Apr 2013 15:00:51 GMT From: Luiz Otavio O Souza <loos.br@gmail.com> To: freebsd-gnats-submit@FreeBSD.org Subject: kern/177873: [etherswitchcfg] [patch] Change the per port vlangroup option to pvid Message-ID: <201304151500.r3FF0pHW084578@red.freebsd.org> Resent-Message-ID: <201304151510.r3FFA0jV063557@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 177873 >Category: kern >Synopsis: [etherswitchcfg] [patch] Change the per port vlangroup option to pvid >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Mon Apr 15 15:10:00 UTC 2013 >Closed-Date: >Last-Modified: >Originator: Luiz Otavio O Souza >Release: -HEAD r248943 >Organization: >Environment: FreeBSD rb433 10.0-CURRENT FreeBSD 10.0-CURRENT #88 r248943M: Sat Apr 13 10:04:43 BRT 2013 root@devel:/data/rb/rb433/obj/mips.mips/data/rb/rb433/src/sys/RB433U mips >Description: etherswitchcfg(8) uses vlangroup to set the per port default VID. Change it to pvid which is widely adopted among many vendors. Discussed with adrian@ and ray@. This breaks the rtl8366 switch driver which will be fixed in a subsequent PR. Today etherswitchcfg(8) usage goes like: root@rb433:~ # etherswitchcfg vlangroup2 vlan 10 members 1,2 vlangroup2: vlan: 10 members 1,2 root@rb433:~ # ./etherswitchcfg port2 vlangroup 2 port2: vlangroup: 2 media: Ethernet autoselect (100baseTX <full-duplex>) status: active The attached patch change it to: root@rb433:~ # etherswitchcfg vlangroup2 vlan 10 members 1,2 vlangroup2: vlan: 10 members 1,2 root@rb433:~ # etherswitchcfg port2 pvid 10 port2: pvid: 10 media: Ethernet autoselect (100baseTX <full-duplex>) status: active >How-To-Repeat: >Fix: Apply the attached patch. Patch attached with submission follows: Index: sbin/etherswitchcfg/etherswitchcfg.8 =================================================================== --- sbin/etherswitchcfg/etherswitchcfg.8 (revision 248943) +++ sbin/etherswitchcfg/etherswitchcfg.8 (working copy) @@ -62,9 +62,9 @@ .Ss port The port command selects one of the ports of the switch. It supports the following commands: -.Bl -tag -width ".Ar vlangroup number" -compact -.It Ar vlangroup number -Sets the VLAN group number that is used to process incoming frames that are not tagged. +.Bl -tag -width ".Ar pvid number" -compact +.It Ar pvid number +Sets the default port VID that is used to process incoming frames that are not tagged. .It Ar media mediaspec Specifies the physical media configuration to be configured for a port. .It Ar mediaopt mediaoption @@ -104,7 +104,7 @@ while excluding all other ports. Port 5 will send and receive tagged frames, while port 0 will be untagged. Incoming untagged frames on port 0 are assigned to vlangroup1. -.Dl # etherswitchcfg vlangroup1 vlan 2 members 0,5t port0 vlangroup 1 +.Dl # etherswitchcfg vlangroup1 vlan 2 members 0,5t port0 pvid 2 .Sh SEE ALSO .Xr etherswitch 4 .Sh HISTORY Index: sbin/etherswitchcfg/etherswitchcfg.c =================================================================== --- sbin/etherswitchcfg/etherswitchcfg.c (revision 248943) +++ sbin/etherswitchcfg/etherswitchcfg.c (working copy) @@ -131,18 +131,19 @@ } static void -set_port_vlangroup(struct cfg *cfg, char *argv[]) +set_port_vid(struct cfg *cfg, char *argv[]) { int v; etherswitch_port_t p; v = strtol(argv[1], NULL, 0); - if (v < 0 || v >= cfg->info.es_nvlangroups) - errx(EX_USAGE, "vlangroup must be between 0 and %d", cfg->info.es_nvlangroups-1); + if (v < 0 || v > IEEE802DOT1Q_VID_MAX) + errx(EX_USAGE, "pvid must be between 0 and %d", + IEEE802DOT1Q_VID_MAX); p.es_port = cfg->unit; if (ioctl(cfg->fd, IOETHERSWITCHGETPORT, &p) != 0) err(EX_OSERR, "ioctl(IOETHERSWITCHGETPORT)"); - p.es_vlangroup = v; + p.es_pvid = v; if (ioctl(cfg->fd, IOETHERSWITCHSETPORT, &p) != 0) err(EX_OSERR, "ioctl(IOETHERSWITCHSETPORT)"); } @@ -301,7 +302,7 @@ if (ioctl(cfg->fd, IOETHERSWITCHGETPORT, &p) != 0) err(EX_OSERR, "ioctl(IOETHERSWITCHGETPORT)"); printf("port%d:\n", port); - printf("\tvlangroup: %d\n", p.es_vlangroup); + printf("\tpvid: %d\n", p.es_pvid); printf("\tmedia: "); print_media_word(p.es_ifmr.ifm_current, 1); if (p.es_ifmr.ifm_active != p.es_ifmr.ifm_current) { @@ -502,7 +503,7 @@ } static struct cmds cmds[] = { - { MODE_PORT, "vlangroup", 1, set_port_vlangroup }, + { MODE_PORT, "pvid", 1, set_port_vid }, { MODE_PORT, "media", 1, set_port_media }, { MODE_PORT, "mediaopt", 1, set_port_mediaopt }, { MODE_VLANGROUP, "vlan", 1, set_vlangroup_vid }, Index: sys/dev/etherswitch/etherswitch.h =================================================================== --- sys/dev/etherswitch/etherswitch.h (revision 248943) +++ sys/dev/etherswitch/etherswitch.h (working copy) @@ -36,7 +36,7 @@ struct etherswitch_port { int es_port; - int es_vlangroup; + int es_pvid; union { struct ifreq es_uifr; struct ifmediareq es_uifmr; >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201304151500.r3FF0pHW084578>