Network Functions

NetworkBridges

size_t NetworkBridges(channel,  
 memory,  
 extent); 
struct channel * channel;
void * memory;
size_t extent;
 

Search a channel for local powerline devices (bridges) and store their Ethernet hardware in consecutive memory locations. The memory extent is specified in bytes. The number of devices found is returned as the function value, provided enough space is available to store all addressed. Unlike function NetworkDevices, the channel peer address is ignored.

We call local devices bridges because each serves as an Ethernet-to-Powerline bridge for the local host.

Example 7.1.  Enumerating Local Devices

#include <net/if.h>
#include "../ether/channel.h"
extern struct channel channel; 
uint8_t address [255][ETHER_ADDR_LEN]; 
size_t bridges = NetworkBridges (&channel, address, sizeof (address));
size_t bridge = 0; 
while (bridge < bridges)
{
   binout (address [bridge], ETHER_ADDR_LEN, ':', stdout);
   putc ('\n', stdout);  
} 

The code segment shown above illustrates how to use function NetworkBridges to identify all local devices. We do not need to set the channel peer because NetworkBridges always uses the Atheros localcast address. Array address is declared with two dimensions to simplify access to individual addresses on return.


NetworkDevices

size_t NetworkDevices(channel,  
 memory,  
 extent); 
struct channel * channel;
void * memory;
size_t extent;
 

Query a powerline device, specified by channel, for neighboring network devices and store their Ethernet addresses in consecutive memory locations. The memory extent is specified in bytes. The number of devices found is returned as the function value, provided sufficient space is available to store all addresses. Unlike function NetworkBridges, the channel peer address is identifies the device to be queried.

Example 7.2.  Enumerating Network Devices

#include <net/if.h>
#include "../ether/channel.h"
extern struct channel channel; 
uint8_t address [255][ETHER_ADDR_LEN]; 
size_t devices = NetworkDevices (&channel, address, sizeof (address));
size_t device = 0; 
while (device < devices)
{
   binout (address [device], ETHER_ADDR_LEN, ':', stdout);
   putc ('\n';, stdout);  
} 

The code segment shown above illustrates how to use function NetworkDevices to identify all devices on a specific network. You must set the channel peer address before calling NetworkDevices. Array address is declared with two dimensions to simplify access to individual addresses on return. If the channel peer address is not the Ethernet broadcast or Atheros localcast address then the first address returned will be the channel peer address.