Annotation of qemu/roms/ipxe/src/hci/commands/ifmgmt_cmd.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (C) 2007 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 <errno.h>
                     23: #include <getopt.h>
                     24: #include <ipxe/netdevice.h>
                     25: #include <ipxe/command.h>
                     26: #include <ipxe/parseopt.h>
                     27: #include <usr/ifmgmt.h>
                     28: #include <hci/ifmgmt_cmd.h>
                     29: 
                     30: /** @file
                     31:  *
                     32:  * Network interface management commands
                     33:  *
                     34:  */
                     35: 
                     36: /** "if<xxx>" command options */
                     37: struct option_descriptor ifcommon_opts[0];
                     38: 
                     39: /**
                     40:  * Execute if<xxx> command
                     41:  *
                     42:  * @v argc             Argument count
                     43:  * @v argv             Argument list
                     44:  * @v cmd              Command descriptor
                     45:  * @v payload          Command to execute
                     46:  * @v verb             Verb describing the action of the command
                     47:  * @ret rc             Return status code
                     48:  */
                     49: int ifcommon_exec ( int argc, char **argv,
                     50:                    struct command_descriptor *cmd,
                     51:                    int ( * payload ) ( struct net_device * ),
                     52:                    int stop_on_first_success ) {
                     53:        struct ifcommon_options opts;
                     54:        struct net_device *netdev;
                     55:        int rc;
                     56: 
                     57:        /* Parse options */
                     58:        if ( ( rc = parse_options ( argc, argv, cmd, &opts ) ) != 0 )
                     59:                return rc;
                     60: 
                     61:        if ( optind != argc ) {
                     62:                /* Treat arguments as a list of interfaces to try */
                     63:                while ( optind != argc ) {
                     64:                        if ( ( rc = parse_netdev ( argv[optind++],
                     65:                                                   &netdev ) ) != 0 ) {
                     66:                                continue;
                     67:                        }
                     68:                        if ( ( ( rc = payload ( netdev ) ) == 0 ) &&
                     69:                             stop_on_first_success ) {
                     70:                                return 0;
                     71:                        }
                     72:                }
                     73:        } else {
                     74:                /* Try all interfaces */
                     75:                rc = -ENODEV;
                     76:                for_each_netdev ( netdev ) {
                     77:                        if ( ( ( rc = payload ( netdev ) ) == 0 ) &&
                     78:                             stop_on_first_success ) {
                     79:                                return 0;
                     80:                        }
                     81:                }
                     82:        }
                     83: 
                     84:        return rc;
                     85: }
                     86: 
                     87: /** "ifopen" command descriptor */
                     88: static struct command_descriptor ifopen_cmd =
                     89:        COMMAND_DESC ( struct ifcommon_options, ifcommon_opts, 0, MAX_ARGUMENTS,
                     90:                       "[<interface>...]" );
                     91: 
                     92: /**
                     93:  * "ifopen" payload
                     94:  *
                     95:  * @v netdev           Network device
                     96:  * @ret rc             Return status code
                     97:  */
                     98: static int ifopen_payload ( struct net_device *netdev ) {
                     99:        return ifopen ( netdev );
                    100: }
                    101: 
                    102: /**
                    103:  * The "ifopen" command
                    104:  *
                    105:  * @v argc             Argument count
                    106:  * @v argv             Argument list
                    107:  * @ret rc             Return status code
                    108:  */
                    109: static int ifopen_exec ( int argc, char **argv ) {
                    110:        return ifcommon_exec ( argc, argv, &ifopen_cmd, ifopen_payload, 0 );
                    111: }
                    112: 
                    113: /** "ifclose" command descriptor */
                    114: static struct command_descriptor ifclose_cmd =
                    115:        COMMAND_DESC ( struct ifcommon_options, ifcommon_opts, 0, MAX_ARGUMENTS,
                    116:                       "[<interface>...]" );
                    117: 
                    118: /**
                    119:  * "ifclose" payload
                    120:  *
                    121:  * @v netdev           Network device
                    122:  * @ret rc             Return status code
                    123:  */
                    124: static int ifclose_payload ( struct net_device *netdev ) {
                    125:        ifclose ( netdev );
                    126:        return 0;
                    127: }
                    128: 
                    129: /**
                    130:  * The "ifclose" command
                    131:  *
                    132:  * @v argc             Argument count
                    133:  * @v argv             Argument list
                    134:  * @ret rc             Return status code
                    135:  */
                    136: static int ifclose_exec ( int argc, char **argv ) {
                    137:        return ifcommon_exec ( argc, argv, &ifclose_cmd, ifclose_payload, 0 );
                    138: }
                    139: 
                    140: /** "ifstat" command descriptor */
                    141: static struct command_descriptor ifstat_cmd =
                    142:        COMMAND_DESC ( struct ifcommon_options, ifcommon_opts, 0, MAX_ARGUMENTS,
                    143:                       "[<interface>...]" );
                    144: 
                    145: /**
                    146:  * "ifstat" payload
                    147:  *
                    148:  * @v netdev           Network device
                    149:  * @ret rc             Return status code
                    150:  */
                    151: static int ifstat_payload ( struct net_device *netdev ) {
                    152:        ifstat ( netdev );
                    153:        return 0;
                    154: }
                    155: 
                    156: /**
                    157:  * The "ifstat" command
                    158:  *
                    159:  * @v argc             Argument count
                    160:  * @v argv             Argument list
                    161:  * @ret rc             Return status code
                    162:  */
                    163: static int ifstat_exec ( int argc, char **argv ) {
                    164:        return ifcommon_exec ( argc, argv, &ifstat_cmd, ifstat_payload, 0 );
                    165: }
                    166: 
                    167: /** Interface management commands */
                    168: struct command ifmgmt_commands[] __command = {
                    169:        {
                    170:                .name = "ifopen",
                    171:                .exec = ifopen_exec,
                    172:        },
                    173:        {
                    174:                .name = "ifclose",
                    175:                .exec = ifclose_exec,
                    176:        },
                    177:        {
                    178:                .name = "ifstat",
                    179:                .exec = ifstat_exec,
                    180:        },
                    181: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.