Perform loopback test between two network devices.
195 {
199 const void *ll_dest;
200 unsigned int i;
201 unsigned int successes;
203
204
207 if ( (
rc =
ifopen ( receiver ) ) != 0 )
209
210
215
216
217 if (
mtu <
sizeof ( *
seq ) )
218 mtu =
sizeof ( *seq );
220 if ( ! buf )
222 seq = ( (
void * ) buf );
223
224
225 ll_dest = ( broadcast ?
sender->ll_broadcast : receiver->
ll_addr );
226
227
228 printf (
"Performing %sloopback test from %s to %s with %zd byte MTU\n",
229 ( broadcast ?
"broadcast " :
"" ),
sender->name,
233
234
237
238
239 for ( successes = 0 ; ; successes++ ) {
240
241
242 printf (
"\r%d", successes );
243
244
246 for ( i =
sizeof ( *
seq ) ; i <
mtu ; i++ )
249 if ( ! iobuf ) {
250 printf (
"\nFailed to allocate I/O buffer" );
252 break;
253 }
256
257
259 &lotest_protocol, ll_dest,
260 sender->ll_addr ) ) != 0 ) {
261 printf (
"\nFailed to transmit packet: %s",
263 break;
264 }
265
266
268 break;
269 }
270
272
273
276
277
280
281
283
284 return 0;
285}
#define NULL
NULL pointer (VOID *)
struct arbelprm_rc_send_wqe rc
#define ENOMEM
Not enough space.
u16 seq
802.11 Sequence Control field
int ifopen(struct net_device *netdev)
Open network device.
int iflinkwait(struct net_device *netdev, unsigned long timeout, int verbose)
Wait for link-up, with status indication.
void ifstat(struct net_device *netdev)
Print status of network device.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
struct io_buffer * alloc_iob(size_t len)
Allocate I/O buffer.
#define iob_put(iobuf, len)
#define iob_disown(iobuf)
Disown an I/O buffer.
#define iob_reserve(iobuf, len)
static int loopback_wait(void *data, size_t len)
Wait for packet to be received.
static void lotest_flush(void)
Discard all received loopback test packets.
static struct net_device * lotest_receiver
Current loopback test receiver.
void * malloc(size_t size)
Allocate memory.
int net_tx(struct io_buffer *iobuf, struct net_device *netdev, struct net_protocol *net_protocol, const void *ll_dest, const void *ll_source)
Transmit network-layer packet.
#define MAX_LL_HEADER_LEN
Maximum length of a link-layer header.
long int random(void)
Generate a pseudo-random number between 0 and 2147483647L or 2147483562?
static void(* free)(struct refcnt *refcnt))
struct stp_switch sender
Sender switch.
char * strerror(int errno)
Retrieve string representation of error number.
char name[NETDEV_NAME_LEN]
Name of this network device.
uint8_t ll_addr[MAX_LL_ADDR_LEN]
Link-layer address.
int printf(const char *fmt,...)
Write a formatted string to the console.