# Traffic Functions

Traffic functions generate powerline traffic in various ways. Some send traffic direct from the host to each device while others use the `VS_FR_LBK` message to echo Ethernet frames back to the sender.

## CrossTraffic1

      				signed CrossTraffic1
       				struct plc * plc

Instruct a powerline device to send a generic Ethernet frame to another powerline device for a fixed period of time in order to set the `TX` rate on the source device and the `RX` rate on the destination device. The source and destination address are specified in `plc->MAC` and `plc->RDA`, respectively, and the duration is specified in `plc->timeperiod`. This function is similar to function CrossTraffic2 but the source and destination addresses are reversed. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file CrossTraffic1.c.

## CrossTraffic2

      				signed CrossTraffic2
       				struct plc * plc

Instruct a powerline device to send a generic Ethernet frame to another powerline device for a fixed period of time in order to set the `TX` rate on the source device and the `RX` rate on the destination device. The source and destination address are specified in `plc->RDA` and `plc->MAC`, respectively, and the duration is specified in `plc->timeperiod`. This function is similar to function CrossTraffic1 but the source and destination addresses are reversed. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file CrossTraffic2.c.

## LocalTraffic1

      				signed LocalTraffic1
       				struct plc * plc

Send a fixed number of generic frames from the local host a remote powerline device in order to set the `TX` rate on the local powerline device and the `RX` rate on the remote powerline device. The local and remote device address are specified in `plc->MAC` and `plc->RDA`, respectively, and the count is specified in `plc->count`. This function is similar to function LocalTraffic2 which instructs a remote device to echo frames back to the local device. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file LocalTraffic1.c.

## LocalTraffic2

      				signed LocalTraffic2
       				struct plc * plc

Instruct a remote powerline device to echo generic Ethernet frames back to the local host for a fixed period of time in order to set the `TX` rate on the remote powerline device and the `RX` rate on the local powerline device. The local and remote device address are specified in `plc->MAC` and `plc->RDA`, respectively, and the count is specified in `plc->count`. This function is useful when there is no easy way to send traffic from the remote host. This function complements function LocalTraffic1 which send frames from the local device to a remote device. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file LocalTraffic2.c.

## NetworkTraffic1

      				signed NetworkTraffic1
       				struct plc * plc

This function is an alternative to function NetworkTraffic2 which uses Qualcomm Version `1` management messages to determine network topology. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file NetworkTraffic1.c.

This function use `VS_SW_INFO` and `VS_NW_INFO` messages to discover powerline network topology then calls functions LocalTraffic1 and LocalTraffic2 to generate traffic between the local powerline device and each remote powerline device. Unlike function NetworkTraffic1, it does not generate traffic between various remote devices.

## NetworkTraffic2

      				signed NetworkTraffic2
       				struct plc * plc

This function is an alternative to function NetworkTraffic1 which uses Qualcomm Version `0` management messages to determine network topology. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file NetworkTraffic2.c.

## Traffic1

      				signed Traffic1
       				struct plc * plc

This function is an alternative to function Traffic2 which uses Qualcomm Version `1` management messages to determine network topology. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file Traffic1.c.

This function use `VS_SW_INFO` and `VS_NW_INFO` messages to discover powerline network topology then calls functions LocalTraffic1 and LocalTraffic2 to generate traffic between the local powerline device and each remote powerline device. Unlike function NetworkTraffic1, it does not generate traffic between remote devices.

## Traffic2

      				signed Traffic2
       				struct plc * plc

This function is an alternative to function Traffic1 which uses Qualcomm Version `0` management messages to determine network topology. Structure `plc` is declared in file plc.h and defined in file plc.c. The function is declared in plc.h and defined in file Traffic2.c.

This function use `VS_SW_INFO` and `VS_NW_INFO` messages to discover powerline network topology then calls functions LocalTraffic1 and LocalTraffic2 to generate traffic between the local powerline device and each remote powerline device. Unlike function NetworkTraffic2, it does not generate traffic between remote devices.