summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorMichael Brown2016-05-20 21:57:18 +0200
committerMichael Brown2016-05-23 15:17:47 +0200
commit80dd6cbcc4fd8c013969e205ee410344d9180b27 (patch)
treeb3726edd26398d3ba032d9e0fc5b00bbe32fdbe7 /src/usr
parent[netdevice] Fix failure path in register_netdev() (diff)
downloadipxe-80dd6cbcc4fd8c013969e205ee410344d9180b27.tar.gz
ipxe-80dd6cbcc4fd8c013969e205ee410344d9180b27.tar.xz
ipxe-80dd6cbcc4fd8c013969e205ee410344d9180b27.zip
[lotest] Add option to use broadcast packets for loopback testing
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/lotest.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/usr/lotest.c b/src/usr/lotest.c
index 6b328713..6b75b504 100644
--- a/src/usr/lotest.c
+++ b/src/usr/lotest.c
@@ -188,13 +188,15 @@ static int loopback_wait ( void *data, size_t len ) {
* @v sender Sending network device
* @v receiver Received network device
* @v mtu Packet size (excluding link-layer headers)
+ * @v broadcast Use broadcast link-layer address
* @ret rc Return status code
*/
int loopback_test ( struct net_device *sender, struct net_device *receiver,
- size_t mtu ) {
+ size_t mtu, int broadcast ) {
uint8_t *buf;
uint32_t *seq;
struct io_buffer *iobuf;
+ const void *ll_dest;
unsigned int i;
unsigned int successes;
int rc;
@@ -219,9 +221,13 @@ int loopback_test ( struct net_device *sender, struct net_device *receiver,
return -ENOMEM;
seq = ( ( void * ) buf );
+ /* Determine destination address */
+ ll_dest = ( broadcast ? sender->ll_broadcast : receiver->ll_addr );
+
/* Print initial statistics */
- printf ( "Performing loopback test from %s to %s with %zd byte MTU\n",
- sender->name, receiver->name, mtu );
+ printf ( "Performing %sloopback test from %s to %s with %zd byte MTU\n",
+ ( broadcast ? "broadcast " : "" ), sender->name,
+ receiver->name, mtu );
ifstat ( sender );
ifstat ( receiver );
@@ -250,7 +256,7 @@ int loopback_test ( struct net_device *sender, struct net_device *receiver,
/* Transmit packet */
if ( ( rc = net_tx ( iob_disown ( iobuf ), sender,
- &lotest_protocol, receiver->ll_addr,
+ &lotest_protocol, ll_dest,
sender->ll_addr ) ) != 0 ) {
printf ( "\nFailed to transmit packet: %s",
strerror ( rc ) );