|
|
1.1 root 1: /*
2: * Copyright (C) 2010 Michael Brown <[email protected]>.
3: *
4: * This program is free software; you can redistribute it and/or
5: * modify it under the terms of the GNU General Public License as
6: * published by the Free Software Foundation; either version 2 of the
7: * License, or any later version.
8: *
9: * This program is distributed in the hope that it will be useful, but
10: * WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12: * General Public License for more details.
13: *
14: * You should have received a copy of the GNU General Public License
15: * along with this program; if not, write to the Free Software
16: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17: */
18:
19: FILE_LICENCE ( GPL2_OR_LATER );
20:
21: #include <stdio.h>
22: #include <stdlib.h>
23: #include <string.h>
24: #include <getopt.h>
25: #include <ipxe/netdevice.h>
26: #include <ipxe/command.h>
27: #include <ipxe/parseopt.h>
28: #include <ipxe/vlan.h>
29:
30: /** @file
31: *
32: * VLAN commands
33: *
34: */
35:
36: /** "vcreate" options */
37: struct vcreate_options {
38: /** VLAN tag */
39: unsigned int tag;
40: /** VLAN default priority */
41: unsigned int priority;
42: };
43:
44: /** "vcreate" option list */
45: static struct option_descriptor vcreate_opts[] = {
46: OPTION_DESC ( "tag", 't', required_argument,
47: struct vcreate_options, tag, parse_integer ),
48: OPTION_DESC ( "priority", 'p', required_argument,
49: struct vcreate_options, priority, parse_integer ),
50: };
51:
52: /** "vcreate" command descriptor */
53: static struct command_descriptor vcreate_cmd =
54: COMMAND_DESC ( struct vcreate_options, vcreate_opts, 1, 1,
55: "--tag <tag> [--priority <priority>] "
56: "<trunk interface>" );
57:
58: /**
59: * "vcreate" command
60: *
61: * @v argc Argument count
62: * @v argv Argument list
63: * @ret rc Return status code
64: */
65: static int vcreate_exec ( int argc, char **argv ) {
66: struct vcreate_options opts;
67: struct net_device *trunk;
68: int rc;
69:
70: /* Parse options */
71: if ( ( rc = parse_options ( argc, argv, &vcreate_cmd, &opts ) ) != 0 )
72: return rc;
73:
74: /* Parse trunk interface */
75: if ( ( rc = parse_netdev ( argv[optind], &trunk ) ) != 0 )
76: return rc;
77:
78: /* Create VLAN device */
79: if ( ( rc = vlan_create ( trunk, opts.tag, opts.priority ) ) != 0 ) {
80: printf ( "Could not create VLAN device: %s\n",
81: strerror ( rc ) );
82: return rc;
83: }
84:
85: return 0;
86: }
87:
88: /** "vdestroy" options */
89: struct vdestroy_options {};
90:
91: /** "vdestroy" option list */
92: static struct option_descriptor vdestroy_opts[] = {};
93:
94: /** "vdestroy" command descriptor */
95: static struct command_descriptor vdestroy_cmd =
96: COMMAND_DESC ( struct vdestroy_options, vdestroy_opts, 1, 1,
97: "<VLAN interface>" );
98:
99: /**
100: * "vdestroy" command
101: *
102: * @v argc Argument count
103: * @v argv Argument list
104: * @ret rc Return status code
105: */
106: static int vdestroy_exec ( int argc, char **argv ) {
107: struct vdestroy_options opts;
108: struct net_device *netdev;
109: int rc;
110:
111: /* Parse options */
112: if ( ( rc = parse_options ( argc, argv, &vdestroy_cmd, &opts ) ) != 0 )
113: return rc;
114:
115: /* Parse trunk interface */
116: if ( ( rc = parse_netdev ( argv[optind], &netdev ) ) != 0 )
117: return rc;
118:
119: /* Destroy VLAN device */
120: if ( ( rc = vlan_destroy ( netdev ) ) != 0 ) {
121: printf ( "Could not destroy VLAN device: %s\n",
122: strerror ( rc ) );
123: return rc;
124: }
125:
126: return 0;
127: }
128:
129: /** VLAN commands */
130: struct command vlan_commands[] __command = {
131: {
132: .name = "vcreate",
133: .exec = vcreate_exec,
134: },
135: {
136: .name = "vdestroy",
137: .exec = vdestroy_exec,
138: },
139: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.