|
|
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/if_ether.h> ! 29: #include <usr/lotest.h> ! 30: ! 31: /** @file ! 32: * ! 33: * Loopback testing commands ! 34: * ! 35: */ ! 36: ! 37: /** "lotest" options */ ! 38: struct lotest_options { ! 39: /** MTU */ ! 40: unsigned int mtu; ! 41: }; ! 42: ! 43: /** "lotest" option list */ ! 44: static struct option_descriptor lotest_opts[] = { ! 45: OPTION_DESC ( "mtu", 'm', required_argument, ! 46: struct lotest_options, mtu, parse_integer ), ! 47: }; ! 48: ! 49: /** "lotest" command descriptor */ ! 50: static struct command_descriptor lotest_cmd = ! 51: COMMAND_DESC ( struct lotest_options, lotest_opts, 2, 2, ! 52: "[--mtu <mtu>] <sending interface> " ! 53: "<receiving interface>" ); ! 54: ! 55: /** ! 56: * "lotest" command ! 57: * ! 58: * @v argc Argument count ! 59: * @v argv Argument list ! 60: * @ret rc Return status code ! 61: */ ! 62: static int lotest_exec ( int argc, char **argv ) { ! 63: struct lotest_options opts; ! 64: struct net_device *sender; ! 65: struct net_device *receiver; ! 66: int rc; ! 67: ! 68: /* Parse options */ ! 69: if ( ( rc = parse_options ( argc, argv, &lotest_cmd, &opts ) ) != 0 ) ! 70: return rc; ! 71: ! 72: /* Parse sending interface name */ ! 73: if ( ( rc = parse_netdev ( argv[optind], &sender ) ) != 0 ) ! 74: return rc; ! 75: ! 76: /* Parse receiving interface name */ ! 77: if ( ( rc = parse_netdev ( argv[ optind + 1 ], &receiver ) ) != 0 ) ! 78: return rc; ! 79: ! 80: /* Use default MTU if none specified */ ! 81: if ( ! opts.mtu ) ! 82: opts.mtu = ETH_MAX_MTU; ! 83: ! 84: /* Perform loopback test */ ! 85: if ( ( rc = loopback_test ( sender, receiver, opts.mtu ) ) != 0 ) { ! 86: printf ( "Test failed: %s\n", strerror ( rc ) ); ! 87: return rc; ! 88: } ! 89: ! 90: return 0; ! 91: } ! 92: ! 93: /** Loopback testing commands */ ! 94: struct command lotest_command __command = { ! 95: .name = "lotest", ! 96: .exec = lotest_exec, ! 97: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.