mirror of
https://github.com/ipxe/ipxe
synced 2026-02-14 02:31:26 +03:00
[tcpip] Allow supported address families to be detected at runtime
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -62,19 +62,18 @@ int tcpip_rx ( struct io_buffer *iobuf, struct net_device *netdev,
|
||||
/**
|
||||
* Find TCP/IP network-layer protocol
|
||||
*
|
||||
* @v st_dest Destination address
|
||||
* @v sa_family Address family
|
||||
* @ret tcpip_net TCP/IP network-layer protocol, or NULL if not found
|
||||
*/
|
||||
static struct tcpip_net_protocol *
|
||||
tcpip_net_protocol ( struct sockaddr_tcpip *st_dest ) {
|
||||
struct tcpip_net_protocol * tcpip_net_protocol ( sa_family_t sa_family ) {
|
||||
struct tcpip_net_protocol *tcpip_net;
|
||||
|
||||
for_each_table_entry ( tcpip_net, TCPIP_NET_PROTOCOLS ) {
|
||||
if ( tcpip_net->sa_family == st_dest->st_family )
|
||||
if ( tcpip_net->sa_family == sa_family )
|
||||
return tcpip_net;
|
||||
}
|
||||
|
||||
DBG ( "Unrecognised TCP/IP address family %d\n", st_dest->st_family );
|
||||
DBG ( "Unrecognised TCP/IP address family %d\n", sa_family );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -95,7 +94,7 @@ int tcpip_tx ( struct io_buffer *iobuf, struct tcpip_protocol *tcpip_protocol,
|
||||
struct tcpip_net_protocol *tcpip_net;
|
||||
|
||||
/* Hand off packet to the appropriate network-layer protocol */
|
||||
tcpip_net = tcpip_net_protocol ( st_dest );
|
||||
tcpip_net = tcpip_net_protocol ( st_dest->st_family );
|
||||
if ( tcpip_net ) {
|
||||
DBG ( "TCP/IP sending %s packet\n", tcpip_net->name );
|
||||
return tcpip_net->tx ( iobuf, tcpip_protocol, st_src, st_dest,
|
||||
@@ -116,7 +115,7 @@ struct net_device * tcpip_netdev ( struct sockaddr_tcpip *st_dest ) {
|
||||
struct tcpip_net_protocol *tcpip_net;
|
||||
|
||||
/* Hand off to the appropriate network-layer protocol */
|
||||
tcpip_net = tcpip_net_protocol ( st_dest );
|
||||
tcpip_net = tcpip_net_protocol ( st_dest->st_family );
|
||||
if ( tcpip_net )
|
||||
return tcpip_net->netdev ( st_dest );
|
||||
|
||||
@@ -135,7 +134,7 @@ size_t tcpip_mtu ( struct sockaddr_tcpip *st_dest ) {
|
||||
size_t mtu;
|
||||
|
||||
/* Find appropriate network-layer protocol */
|
||||
tcpip_net = tcpip_net_protocol ( st_dest );
|
||||
tcpip_net = tcpip_net_protocol ( st_dest->st_family );
|
||||
if ( ! tcpip_net )
|
||||
return 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user