Control network channel using a gateway
Overview
Macros and functions for gateway configuration to be used in tests. More…
// typedefs typedef struct tapi_route_gateway tapi_route_gateway; // structs struct tapi_route_gateway; // global functions te_errno tapi_add_dynamic_arp(const char* ta_src, const char* ifname_src, const char* ta_dest, const char* ifname_dest, const struct sockaddr* addr_dest, const struct sockaddr* link_addr_dest); te_errno tapi_add_static_arp(const char* ta_src, const char* ifname_src, const char* ta_dest, const char* ifname_dest, const struct sockaddr* addr_dest, const struct sockaddr* link_addr_dest); te_errno tapi_update_arp(const char* ta_src, const char* ifname_src, const char* ta_dest, const char* ifname_dest, const struct sockaddr* addr_dest, const void* link_addr_dest, bool is_static); te_errno tapi_remove_arp(const char* ta, const char* if_name, const struct sockaddr* net_addr); te_errno tapi_route_gateway_init(tapi_route_gateway* gw, const char* iut_ta, const char* tst_ta, const char* gw_ta, const struct if_nameindex* iut_if, const struct if_nameindex* tst_if, const struct if_nameindex* gw_iut_if, const struct if_nameindex* gw_tst_if, const struct sockaddr* iut_addr, const struct sockaddr* tst_addr, const struct sockaddr* gw_iut_addr, const struct sockaddr* gw_tst_addr, const struct sockaddr* alien_link_addr); te_errno tapi_route_gateway_configure(tapi_route_gateway* gw); te_errno tapi_route_gateway_set_forwarding(tapi_route_gateway* gw, bool enabled); te_errno tapi_route_gateway_break_gw_iut(tapi_route_gateway* gw); te_errno tapi_route_gateway_repair_gw_iut(tapi_route_gateway* gw); te_errno tapi_route_gateway_break_gw_tst(tapi_route_gateway* gw); te_errno tapi_route_gateway_repair_gw_tst(tapi_route_gateway* gw); te_errno tapi_route_gateway_break_iut_gw(tapi_route_gateway* gw); te_errno tapi_route_gateway_repair_iut_gw(tapi_route_gateway* gw); te_errno tapi_route_gateway_break_tst_gw(tapi_route_gateway* gw); te_errno tapi_route_gateway_repair_tst_gw(tapi_route_gateway* gw); te_errno tapi_route_gateway_down_up_ifaces(tapi_route_gateway* gw); // macros #define TAPI_DECLARE_ROUTE_GATEWAY_PARAMS #define TAPI_GET_ROUTE_GATEWAY_PARAMS #define TAPI_INIT_ROUTE_GATEWAY(gw_)
Detailed Documentation
Macros and functions for gateway configuration to be used in tests. “Gateway” here is the third host which forwards packets between two testing hosts not connected directly. The header must be included from test sources only. It is allowed to use the macros only from main() function of the test.
Copyright (C) 2004-2022 OKTET Labs Ltd. All rights reserved.
Typedefs
typedef struct tapi_route_gateway tapi_route_gateway
Structure describing gateway connecting IUT and Tester hosts.
Global Functions
te_errno tapi_add_dynamic_arp(const char* ta_src, const char* ifname_src, const char* ta_dest, const char* ifname_dest, const struct sockaddr* addr_dest, const struct sockaddr* link_addr_dest)
Add dynamic entry to neighbour table.
Netlink does not allow to make address resolution at a reasonable time if it does not know where to send the request. Therefore the dst MAC address is required.
Parameters:
ta_src |
Source TA. |
ifname_src |
Source interface name. |
ta_dest |
Destination TA. |
ifname_dest |
Destination interface name. |
addr_dest |
Destination address. |
link_addr_dest |
New destination MAC or |
Returns:
Status code.
te_errno tapi_add_static_arp(const char* ta_src, const char* ifname_src, const char* ta_dest, const char* ifname_dest, const struct sockaddr* addr_dest, const struct sockaddr* link_addr_dest)
Add static entry to neighbour table with fake or actual MAC address.
Parameters:
ta_src |
Source TA. |
ifname_src |
Source interface name. |
ta_dest |
Destination TA. |
ifname_dest |
Destination interface name. |
addr_dest |
Destination address. |
link_addr_dest |
New destination MAC or |
Returns:
Status code.
te_errno tapi_update_arp(const char* ta_src, const char* ifname_src, const char* ta_dest, const char* ifname_dest, const struct sockaddr* addr_dest, const void* link_addr_dest, bool is_static)
Update entry in the neighbour table.
Parameters:
ta_src |
Source TA. |
ifname_src |
Source interface name. |
ta_dest |
Destination TA. |
ifname_dest |
Destination interface name. |
addr_dest |
Destination address. |
link_addr_dest |
New destination MAC or |
is_static |
If the new ARP row should be static. |
Returns:
Status code.
See also:
tapi_add_static_arp, tapi_add_dynmaic_arp
te_errno tapi_remove_arp(const char* ta, const char* if_name, const struct sockaddr* net_addr)
Remove existing ARP table entry, wait for a while, check that it did not reappear automatically. If it did, try to remove it again a few times before giving up.
Parameters:
ta |
Test Agent name. |
if_name |
Interface name. |
net_addr |
IP address. |
Returns:
Status code.
te_errno tapi_route_gateway_init(tapi_route_gateway* gw, const char* iut_ta, const char* tst_ta, const char* gw_ta, const struct if_nameindex* iut_if, const struct if_nameindex* tst_if, const struct if_nameindex* gw_iut_if, const struct if_nameindex* gw_tst_if, const struct sockaddr* iut_addr, const struct sockaddr* tst_addr, const struct sockaddr* gw_iut_addr, const struct sockaddr* gw_tst_addr, const struct sockaddr* alien_link_addr)
Initialize gateway structure.
Parameters:
gw |
Pointer to gateway structure. |
iut_ta |
TA on IUT. |
tst_ta |
TA on Tester. |
gw_ta |
TA on gateway. |
iut_if |
Network interface on IUT. |
tst_if |
Network interface on Tester. |
gw_iut_if |
Network interface on gateway connected to IUT. |
gw_tst_if |
Network interface on gateway connected to Tester. |
iut_addr |
Network address on IUT. |
tst_addr |
Network address on Tester. |
gw_iut_addr |
Network address on |
gw_tst_addr |
Network address on |
alien_link_addr |
Alien ethernet address. |
Returns:
Status code.
te_errno tapi_route_gateway_configure(tapi_route_gateway* gw)
Configure connection via gateway.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_set_forwarding(tapi_route_gateway* gw, bool enabled)
Enable or disable IPv4 or IPv6 forwarding on gateway.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_break_gw_iut(tapi_route_gateway* gw)
Break connection from gateway to IUT.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_repair_gw_iut(tapi_route_gateway* gw)
Repair connection from gateway to IUT.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_break_gw_tst(tapi_route_gateway* gw)
Break connection from gateway to Tester.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_repair_gw_tst(tapi_route_gateway* gw)
Repair connection from gateway to Tester.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_break_iut_gw(tapi_route_gateway* gw)
Break connection from IUT to gateway.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_repair_iut_gw(tapi_route_gateway* gw)
Repair connection from IUT to gateway.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_break_tst_gw(tapi_route_gateway* gw)
Break connection from Tester to gateway.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_repair_tst_gw(tapi_route_gateway* gw)
Repair connection from Tester to gateway.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
te_errno tapi_route_gateway_down_up_ifaces(tapi_route_gateway* gw)
Down up all interfaces that were in gateway connection.
Caller should take care about wait for the interfaces to be raised.
Parameters:
gw |
Gateway description. |
Returns:
Status code.
Macros
#define TAPI_DECLARE_ROUTE_GATEWAY_PARAMS
Declare test parameters related to gateway configuration.
#define TAPI_GET_ROUTE_GATEWAY_PARAMS
Get test parameters related to gateway configuration.
#define TAPI_INIT_ROUTE_GATEWAY(gw_)
Initialize gateway structure.
Parameters:
gw_ |
Gateway structure. |