From: Susant Sahani Date: Sat, 4 May 2019 14:51:13 +0000 (+0530) Subject: networkd: Add support to configure proxy ARP and proxy ARP Wifi X-Git-Tag: v243-rc1~459^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1087623bacc2a7e1f3090f31b0b7721cae16a003;p=thirdparty%2Fsystemd.git networkd: Add support to configure proxy ARP and proxy ARP Wifi --- diff --git a/man/systemd.network.xml b/man/systemd.network.xml index f24bf401595..44354f8bf2d 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1893,6 +1893,21 @@ When unset, the kernel's default will be used. + + ProxyARP= + + Takes a boolean. Configures whether proxy ARP to be enabled on this port. + When unset, the kernel's default will be used. + + + + ProxyARPWiFi= + + Takes a boolean. Configures whether proxy ARP to be enabled on this port + which meets extended requirements by IEEE 802.11 and Hotspot 2.0 specifications. + When unset, the kernel's default will be used. + + Cost= diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 3c8b5c5cb43..ea4576b6abc 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1592,7 +1592,6 @@ static int link_set_bridge(Link *link) { r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROTECT, link->network->allow_port_to_be_root); if (r < 0) return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_PROTECT attribute: %m"); - } if (link->network->unicast_flood >= 0) { @@ -1625,6 +1624,18 @@ static int link_set_bridge(Link *link) { return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_LEARNING attribute: %m"); } + if (link->network->bridge_proxy_arp >= 0) { + r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROXYARP, link->network->bridge_proxy_arp); + if (r < 0) + return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_PROXYARP attribute: %m"); + } + + if (link->network->bridge_proxy_arp_wifi >= 0) { + r = sd_netlink_message_append_u8(req, IFLA_BRPORT_PROXYARP_WIFI, link->network->bridge_proxy_arp_wifi); + if (r < 0) + return log_link_error_errno(link, r, "Could not append IFLA_BRPORT_PROXYARP_WIFI attribute: %m"); + } + if (link->network->cost != 0) { r = sd_netlink_message_append_u32(req, IFLA_BRPORT_COST, link->network->cost); if (r < 0) diff --git a/src/network/networkd-network-gperf.gperf b/src/network/networkd-network-gperf.gperf index 98c2241fca2..dded4c701cf 100644 --- a/src/network/networkd-network-gperf.gperf +++ b/src/network/networkd-network-gperf.gperf @@ -177,6 +177,8 @@ Bridge.MulticastFlood, config_parse_tristate, Bridge.MulticastToUnicast, config_parse_tristate, 0, offsetof(Network, multicast_to_unicast) Bridge.NeighborSuppression, config_parse_tristate, 0, offsetof(Network, neighbor_suppression) Bridge.Learning, config_parse_tristate, 0, offsetof(Network, learning) +Bridge.ProxyARP, config_parse_tristate, 0, offsetof(Network, bridge_proxy_arp) +Bridge.ProxyARPWiFi, config_parse_tristate, 0, offsetof(Network, bridge_proxy_arp_wifi) Bridge.Priority, config_parse_bridge_port_priority, 0, offsetof(Network, priority) BridgeFDB.MACAddress, config_parse_fdb_hwaddr, 0, 0 BridgeFDB.VLANId, config_parse_fdb_vlan_id, 0, 0 diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c index 6e0e1eae08d..255aeed3a65 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -386,6 +386,8 @@ int network_load_one(Manager *manager, const char *filename) { .multicast_to_unicast = -1, .neighbor_suppression = -1, .learning = -1, + .bridge_proxy_arp = -1, + .bridge_proxy_arp_wifi = -1, .priority = LINK_BRIDGE_PORT_PRIORITY_INVALID, .lldp_mode = LLDP_MODE_ROUTERS_ONLY, diff --git a/src/network/networkd-network.h b/src/network/networkd-network.h index 9ee8fb72b8d..3886d629a41 100644 --- a/src/network/networkd-network.h +++ b/src/network/networkd-network.h @@ -181,6 +181,8 @@ struct Network { int multicast_to_unicast; int neighbor_suppression; int learning; + int bridge_proxy_arp; + int bridge_proxy_arp_wifi; uint32_t cost; uint16_t priority; diff --git a/test/fuzz/fuzz-network-parser/directives.network b/test/fuzz/fuzz-network-parser/directives.network index 9296c16c498..0c468f579fc 100644 --- a/test/fuzz/fuzz-network-parser/directives.network +++ b/test/fuzz/fuzz-network-parser/directives.network @@ -10,6 +10,8 @@ MulticastToUnicast= MulticastFlood= NeighborSuppression= Learning= +ProxyARP= +ProxyARPWiFi= [Match] KernelVersion= Type=