etherswitchcfg.c (249748) | etherswitchcfg.c (249752) |
---|---|
1/*- 2 * Copyright (c) 2011-2012 Stefan Bethke. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * | 1/*- 2 * Copyright (c) 2011-2012 Stefan Bethke. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/sbin/etherswitchcfg/etherswitchcfg.c 249748 2013-04-22 05:30:20Z adrian $ | 26 * $FreeBSD: head/sbin/etherswitchcfg/etherswitchcfg.c 249752 2013-04-22 05:52:18Z adrian $ |
27 */ 28 29#include <sys/cdefs.h> | 27 */ 28 29#include <sys/cdefs.h> |
30__FBSDID("$FreeBSD: head/sbin/etherswitchcfg/etherswitchcfg.c 249748 2013-04-22 05:30:20Z adrian $"); | 30__FBSDID("$FreeBSD: head/sbin/etherswitchcfg/etherswitchcfg.c 249752 2013-04-22 05:52:18Z adrian $"); |
31 32#include <ctype.h> 33#include <err.h> 34#include <errno.h> 35#include <fcntl.h> 36#include <stdio.h> 37#include <stdlib.h> 38#include <string.h> --- 87 unchanged lines hidden (view full) --- 126 er.phy = phy; 127 er.reg = reg; 128 er.val = val; 129 if (ioctl(cfg->fd, IOETHERSWITCHSETPHYREG, &er) != 0) 130 err(EX_OSERR, "ioctl(IOETHERSWITCHSETPHYREG)"); 131} 132 133static void | 31 32#include <ctype.h> 33#include <err.h> 34#include <errno.h> 35#include <fcntl.h> 36#include <stdio.h> 37#include <stdlib.h> 38#include <string.h> --- 87 unchanged lines hidden (view full) --- 126 er.phy = phy; 127 er.reg = reg; 128 er.val = val; 129 if (ioctl(cfg->fd, IOETHERSWITCHSETPHYREG, &er) != 0) 130 err(EX_OSERR, "ioctl(IOETHERSWITCHSETPHYREG)"); 131} 132 133static void |
134set_port_vlangroup(struct cfg *cfg, char *argv[]) | 134set_port_vid(struct cfg *cfg, char *argv[]) |
135{ 136 int v; 137 etherswitch_port_t p; 138 139 v = strtol(argv[1], NULL, 0); | 135{ 136 int v; 137 etherswitch_port_t p; 138 139 v = strtol(argv[1], NULL, 0); |
140 if (v < 0 || v >= cfg->info.es_nvlangroups) 141 errx(EX_USAGE, "vlangroup must be between 0 and %d", cfg->info.es_nvlangroups-1); | 140 if (v < 0 || v > IEEE802DOT1Q_VID_MAX) 141 errx(EX_USAGE, "pvid must be between 0 and %d", 142 IEEE802DOT1Q_VID_MAX); |
142 bzero(&p, sizeof(p)); 143 p.es_port = cfg->unit; 144 if (ioctl(cfg->fd, IOETHERSWITCHGETPORT, &p) != 0) 145 err(EX_OSERR, "ioctl(IOETHERSWITCHGETPORT)"); | 143 bzero(&p, sizeof(p)); 144 p.es_port = cfg->unit; 145 if (ioctl(cfg->fd, IOETHERSWITCHGETPORT, &p) != 0) 146 err(EX_OSERR, "ioctl(IOETHERSWITCHGETPORT)"); |
146 p.es_vlangroup = v; | 147 p.es_pvid = v; |
147 if (ioctl(cfg->fd, IOETHERSWITCHSETPORT, &p) != 0) 148 err(EX_OSERR, "ioctl(IOETHERSWITCHSETPORT)"); 149} 150 151static void 152set_port_media(struct cfg *cfg, char *argv[]) 153{ 154 etherswitch_port_t p; --- 142 unchanged lines hidden (view full) --- 297 298 bzero(&p, sizeof(p)); 299 p.es_port = port; 300 p.es_ifmr.ifm_ulist = ifm_ulist; 301 p.es_ifmr.ifm_count = IFMEDIAREQ_NULISTENTRIES; 302 if (ioctl(cfg->fd, IOETHERSWITCHGETPORT, &p) != 0) 303 err(EX_OSERR, "ioctl(IOETHERSWITCHGETPORT)"); 304 printf("port%d:\n", port); | 148 if (ioctl(cfg->fd, IOETHERSWITCHSETPORT, &p) != 0) 149 err(EX_OSERR, "ioctl(IOETHERSWITCHSETPORT)"); 150} 151 152static void 153set_port_media(struct cfg *cfg, char *argv[]) 154{ 155 etherswitch_port_t p; --- 142 unchanged lines hidden (view full) --- 298 299 bzero(&p, sizeof(p)); 300 p.es_port = port; 301 p.es_ifmr.ifm_ulist = ifm_ulist; 302 p.es_ifmr.ifm_count = IFMEDIAREQ_NULISTENTRIES; 303 if (ioctl(cfg->fd, IOETHERSWITCHGETPORT, &p) != 0) 304 err(EX_OSERR, "ioctl(IOETHERSWITCHGETPORT)"); 305 printf("port%d:\n", port); |
305 printf("\tvlangroup: %d\n", p.es_vlangroup); | 306 printf("\tpvid: %d\n", p.es_pvid); |
306 printf("\tmedia: "); 307 print_media_word(p.es_ifmr.ifm_current, 1); 308 if (p.es_ifmr.ifm_active != p.es_ifmr.ifm_current) { 309 putchar(' '); 310 putchar('('); 311 print_media_word(p.es_ifmr.ifm_active, 0); 312 putchar(')'); 313 } --- 187 unchanged lines hidden (view full) --- 501 } 502 /* switch back to command mode to print configuration for last command */ 503 newmode(&cfg, MODE_NONE); 504 close(cfg.fd); 505 return (0); 506} 507 508static struct cmds cmds[] = { | 307 printf("\tmedia: "); 308 print_media_word(p.es_ifmr.ifm_current, 1); 309 if (p.es_ifmr.ifm_active != p.es_ifmr.ifm_current) { 310 putchar(' '); 311 putchar('('); 312 print_media_word(p.es_ifmr.ifm_active, 0); 313 putchar(')'); 314 } --- 187 unchanged lines hidden (view full) --- 502 } 503 /* switch back to command mode to print configuration for last command */ 504 newmode(&cfg, MODE_NONE); 505 close(cfg.fd); 506 return (0); 507} 508 509static struct cmds cmds[] = { |
509 { MODE_PORT, "vlangroup", 1, set_port_vlangroup }, | 510 { MODE_PORT, "pvid", 1, set_port_vid }, |
510 { MODE_PORT, "media", 1, set_port_media }, 511 { MODE_PORT, "mediaopt", 1, set_port_mediaopt }, 512 { MODE_VLANGROUP, "vlan", 1, set_vlangroup_vid }, 513 { MODE_VLANGROUP, "members", 1, set_vlangroup_members }, 514 { 0, NULL, 0, NULL } 515}; | 511 { MODE_PORT, "media", 1, set_port_media }, 512 { MODE_PORT, "mediaopt", 1, set_port_mediaopt }, 513 { MODE_VLANGROUP, "vlan", 1, set_vlangroup_vid }, 514 { MODE_VLANGROUP, "members", 1, set_vlangroup_members }, 515 { 0, NULL, 0, NULL } 516}; |