The pw_router
module provides transport-agnostic classes for routing packets
over network links.
To work with arbitrary packet formats, routers require a common interface for
extracting relevant packet data, such as the destination. This interface is
pw::router::PacketParser
, defined in pw_router/packet_parser.h
, which
must be implemented for the packet framing format used by the network.
The Egress class is a virtual interface for sending packet data over a network
link. Egress implementations provide a single SendPacket
function, which
takes the raw packet data and transmits it.
Some common egress implementations are provided upstream in Pigweed.
pw::router::StaticRouter
is a router with a static table of address to
egress mappings. Routes in a static router never change; packets with the same
address are always sent through the same egress. If links are unavailable,
packets will be dropped.
Static routers are suitable for basic networks with persistent links.
namespace {
// Define packet parser and egresses.
HdlcFrameParser hdlc_parser;
UartEgress uart_egress;
BluetoothEgress ble_egress;
// Define the routing table.
constexpr pw::router::StaticRouter::Route routes[] = {{1, uart_egress},
{7, ble_egress}};
pw::router::StaticRouter router(hdlc_parser, routes);
} // namespace
void ProcessPacket(pw::ConstByteSpan packet) {
router.RoutePacket(packet);
}