mirror of https://github.com/ipxe/ipxe.git
[lotest] Add option to use broadcast packets for loopback testing
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/54/head^2
parent
231adda40f
commit
80dd6cbcc4
|
@ -43,12 +43,16 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||||
struct lotest_options {
|
struct lotest_options {
|
||||||
/** MTU */
|
/** MTU */
|
||||||
unsigned int mtu;
|
unsigned int mtu;
|
||||||
|
/** Broadcast */
|
||||||
|
int broadcast;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** "lotest" option list */
|
/** "lotest" option list */
|
||||||
static struct option_descriptor lotest_opts[] = {
|
static struct option_descriptor lotest_opts[] = {
|
||||||
OPTION_DESC ( "mtu", 'm', required_argument,
|
OPTION_DESC ( "mtu", 'm', required_argument,
|
||||||
struct lotest_options, mtu, parse_integer ),
|
struct lotest_options, mtu, parse_integer ),
|
||||||
|
OPTION_DESC ( "broadcast", 'b', no_argument,
|
||||||
|
struct lotest_options, broadcast, parse_flag ),
|
||||||
};
|
};
|
||||||
|
|
||||||
/** "lotest" command descriptor */
|
/** "lotest" command descriptor */
|
||||||
|
@ -86,7 +90,8 @@ static int lotest_exec ( int argc, char **argv ) {
|
||||||
opts.mtu = ETH_MAX_MTU;
|
opts.mtu = ETH_MAX_MTU;
|
||||||
|
|
||||||
/* Perform loopback test */
|
/* Perform loopback test */
|
||||||
if ( ( rc = loopback_test ( sender, receiver, opts.mtu ) ) != 0 ) {
|
if ( ( rc = loopback_test ( sender, receiver, opts.mtu,
|
||||||
|
opts.broadcast ) ) != 0 ) {
|
||||||
printf ( "Test failed: %s\n", strerror ( rc ) );
|
printf ( "Test failed: %s\n", strerror ( rc ) );
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
||||||
|
|
||||||
extern int loopback_test ( struct net_device *sender,
|
extern int loopback_test ( struct net_device *sender,
|
||||||
struct net_device *receiver, size_t mtu );
|
struct net_device *receiver,
|
||||||
|
size_t mtu, int broadcast );
|
||||||
|
|
||||||
#endif /* _USR_LOTEST_H */
|
#endif /* _USR_LOTEST_H */
|
||||||
|
|
|
@ -188,13 +188,15 @@ static int loopback_wait ( void *data, size_t len ) {
|
||||||
* @v sender Sending network device
|
* @v sender Sending network device
|
||||||
* @v receiver Received network device
|
* @v receiver Received network device
|
||||||
* @v mtu Packet size (excluding link-layer headers)
|
* @v mtu Packet size (excluding link-layer headers)
|
||||||
|
* @v broadcast Use broadcast link-layer address
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
int loopback_test ( struct net_device *sender, struct net_device *receiver,
|
int loopback_test ( struct net_device *sender, struct net_device *receiver,
|
||||||
size_t mtu ) {
|
size_t mtu, int broadcast ) {
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
uint32_t *seq;
|
uint32_t *seq;
|
||||||
struct io_buffer *iobuf;
|
struct io_buffer *iobuf;
|
||||||
|
const void *ll_dest;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
unsigned int successes;
|
unsigned int successes;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -219,9 +221,13 @@ int loopback_test ( struct net_device *sender, struct net_device *receiver,
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
seq = ( ( void * ) buf );
|
seq = ( ( void * ) buf );
|
||||||
|
|
||||||
|
/* Determine destination address */
|
||||||
|
ll_dest = ( broadcast ? sender->ll_broadcast : receiver->ll_addr );
|
||||||
|
|
||||||
/* Print initial statistics */
|
/* Print initial statistics */
|
||||||
printf ( "Performing loopback test from %s to %s with %zd byte MTU\n",
|
printf ( "Performing %sloopback test from %s to %s with %zd byte MTU\n",
|
||||||
sender->name, receiver->name, mtu );
|
( broadcast ? "broadcast " : "" ), sender->name,
|
||||||
|
receiver->name, mtu );
|
||||||
ifstat ( sender );
|
ifstat ( sender );
|
||||||
ifstat ( receiver );
|
ifstat ( receiver );
|
||||||
|
|
||||||
|
@ -250,7 +256,7 @@ int loopback_test ( struct net_device *sender, struct net_device *receiver,
|
||||||
|
|
||||||
/* Transmit packet */
|
/* Transmit packet */
|
||||||
if ( ( rc = net_tx ( iob_disown ( iobuf ), sender,
|
if ( ( rc = net_tx ( iob_disown ( iobuf ), sender,
|
||||||
&lotest_protocol, receiver->ll_addr,
|
&lotest_protocol, ll_dest,
|
||||||
sender->ll_addr ) ) != 0 ) {
|
sender->ll_addr ) ) != 0 ) {
|
||||||
printf ( "\nFailed to transmit packet: %s",
|
printf ( "\nFailed to transmit packet: %s",
|
||||||
strerror ( rc ) );
|
strerror ( rc ) );
|
||||||
|
|
Loading…
Reference in New Issue