From patchwork Thu Feb 23 04:57:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony Refuerzo X-Patchwork-Id: 1747011 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=GCT449X8; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=DDFMP2Zw; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PMy5v5htRz23yr for ; Fri, 24 Feb 2023 02:45:23 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=cl+jOIb8NryO+4HCPQE9mg8+C6BhZ0j/hlTok1Hef2c=; b=GCT449X86Yoife 4P++EL2G0eDdaoJJ+wfxlsOyj9kuK3UsogNcYDOShNFTzsnnYMjamNFDrGmdaOxhPPXcLIYlXfBje Yp38UOtiAuE0oAnA8FpY4yCRZv61clolH53SBB6wilR++YT8h6rPWjxcce8KBZKD78ScTDOhSFaNO mTORY6/42Sl2D+KJP9eYVTGFHCUWwrqVooxv/jiBGUe2D3UwV8uSWRT2V0O/tbWGS3x6cyoRH+NMI bG9gxwOJ485zl12ULVxpRMrWTzBUd7glrhOu2j/JtI78GQevOfWl5JSvl0UlniMglRWlERYYwNPs2 bPg3IrZJmc3MXORnvwVQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1pVDln-00H7I1-6a; Thu, 23 Feb 2023 15:44:31 +0000 Received: from mail-pj1-x102b.google.com ([2607:f8b0:4864:20::102b]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1pV3fk-00F5vd-D1 for hostap@lists.infradead.org; Thu, 23 Feb 2023 04:57:37 +0000 Received: by mail-pj1-x102b.google.com with SMTP id c23so6634323pjo.4 for ; Wed, 22 Feb 2023 20:57:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=4PO5Tz2TeoSY5vGtDlQ60dCI63jo/siKs4TxZ7O5Awo=; b=DDFMP2ZwtmWJ/d42kyq2PWOHZ5gTUVRsG3DZxzaEROtlIkgELaKqaOcnMQuUOmBy62 sUdQ/l9PYrtR3lqx0Y/m+q1gZ9rDO4Emmv6dhgbcNUbAc0RzZIYzIb/ifPiQjXbr47Zk KfeUiKKUQOxprS8TEcgi1mUOZHKdPYOkHs7wdjHb3gvA73Du5fop6LsbNpAFAxr9Zrtj VD3eLfgnrbXJH5xUBsF3PH8kI589FaSBPdhZbrHXh3vsMp54xPtqdJ9Gf34HI62X5k+3 jE8zGMC2AviGpwOIjlRSzs/Oh3ZOA9Ioos28fQMI0Gz4jbjugN+TWzbwwpITv45K0RUP 7JDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4PO5Tz2TeoSY5vGtDlQ60dCI63jo/siKs4TxZ7O5Awo=; b=SPlDpHDnqMoIXhVVA1j5BYovSuCpNafrXtG9tau7dXEt4SiH0weudwSxpk34t/+6qy 8dSo/CTgrWPVZnX+m639YXsAi9v2Bk7R8y+MpuMtZ8gNEqloWuIaeglHFn8m6GFD0g/4 jVan9O3UH0wWsMG8EQgRn9P3knWjar9EbEnnXYiDtypjkSQhAmkDT5mWWKIuAkRbFxO6 +hajVGpSLcYhNWkizvyKQdMDrCFesqlvXZtzpqrIgTMbtpedrdlL91g/z2TIrrjpztVB RiESDtM5C0iy13wDpOasN/GLHndYnQyF9hM4gih+q97aFm6WeL2p61WcplQUAGQp2HrY ktpQ== X-Gm-Message-State: AO0yUKWMQXGNG6wq7z9Zj0NbFyEzSpjdwG69ohAvvl9b6Ec3HfwzlwcA oXBXS15VxkFcv2PqhqQkwA5UY01b1k4= X-Google-Smtp-Source: AK7set+J4preI42TAox/rlbLYl/IVI4Z1PqH/wkq1PCrfgpY6YcRKDyrepw7w20JidTtbmH/tlk37Q== X-Received: by 2002:a17:902:ed4d:b0:19c:a5dd:ceb4 with SMTP id y13-20020a170902ed4d00b0019ca5ddceb4mr5446579plb.5.1677128249039; Wed, 22 Feb 2023 20:57:29 -0800 (PST) Received: from localhost.localdomain (2603-8000-0b00-9100-83fb-7542-515b-f667.res6.spectrum.com. [2603:8000:b00:9100:83fb:7542:515b:f667]) by smtp.gmail.com with ESMTPSA id jw9-20020a170903278900b0019a7d58e595sm2675523plb.143.2023.02.22.20.57.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Feb 2023 20:57:28 -0800 (PST) From: Anthony Refuerzo To: hostap@lists.infradead.org Cc: Anthony Refuerzo Subject: [PATCH] AP: add some bridge port attribute settings Date: Wed, 22 Feb 2023 20:57:23 -0800 Message-Id: <20230223045723.2089-1-anthony96922@gmail.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230222_205736_461934_C7413899 X-CRM114-Status: GOOD ( 15.63 ) X-Spam-Score: 0.1 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: "multicast_to_unicast" and "hairpin_mode" are usually set outside of hostapd. However DFS channel change events pull the BSS out of the bridge causing these attributes to be lost. Make these settings [...] Content analysis details: (0.1 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:102b listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [anthony96922[at]gmail.com] 0.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends in digit [anthony96922[at]gmail.com] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-Mailman-Approved-At: Thu, 23 Feb 2023 07:44:29 -0800 X-BeenThere: hostap@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Hostap" Errors-To: hostap-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org "multicast_to_unicast" and "hairpin_mode" are usually set outside of hostapd. However DFS channel change events pull the BSS out of the bridge causing these attributes to be lost. Make these settings tunable within hostapd so they are retained after the BSS is brought up again. Signed-off-by: Anthony Refuerzo --- hostapd/config_file.c | 4 ++++ src/ap/ap_config.h | 2 ++ src/ap/hostapd.c | 12 ++++++++++++ src/drivers/driver.h | 1 + src/drivers/driver_nl80211.c | 2 ++ 5 files changed, 21 insertions(+) diff --git a/hostapd/config_file.c b/hostapd/config_file.c index 472a91df2..2e208d3f6 100644 --- a/hostapd/config_file.c +++ b/hostapd/config_file.c @@ -2316,6 +2316,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, sizeof(conf->bss[0]->iface)); } else if (os_strcmp(buf, "bridge") == 0) { os_strlcpy(bss->bridge, pos, sizeof(bss->bridge)); + } else if (os_strcmp(buf, "bridge_hairpin") == 0) { + bss->bridge_hairpin = atoi(pos); } else if (os_strcmp(buf, "vlan_bridge") == 0) { os_strlcpy(bss->vlan_bridge, pos, sizeof(bss->vlan_bridge)); } else if (os_strcmp(buf, "wds_bridge") == 0) { @@ -4467,6 +4469,8 @@ static int hostapd_config_fill(struct hostapd_config *conf, #endif /* CONFIG_FILS */ } else if (os_strcmp(buf, "multicast_to_unicast") == 0) { bss->multicast_to_unicast = atoi(pos); + } else if (os_strcmp(buf, "bridge_multicast_to_unicast") == 0) { + bss->bridge_multicast_to_unicast = atoi(pos); } else if (os_strcmp(buf, "broadcast_deauth") == 0) { bss->broadcast_deauth = atoi(pos); } else if (os_strcmp(buf, "notify_mgmt_frames") == 0) { diff --git a/src/ap/ap_config.h b/src/ap/ap_config.h index dfe259c30..7036c15d5 100644 --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h @@ -284,6 +284,7 @@ struct hostapd_bss_config { char bridge[IFNAMSIZ + 1]; char vlan_bridge[IFNAMSIZ + 1]; char wds_bridge[IFNAMSIZ + 1]; + int bridge_hairpin; /* hairpin_mode on bridge members */ enum hostapd_logger_level logger_syslog_level, logger_stdout_level; @@ -748,6 +749,7 @@ struct hostapd_bss_config { #endif /* CONFIG_FILS */ int multicast_to_unicast; + int bridge_multicast_to_unicast; int broadcast_deauth; diff --git a/src/ap/hostapd.c b/src/ap/hostapd.c index 58492e51e..5a17a75f6 100644 --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c @@ -1435,6 +1435,18 @@ static int hostapd_setup_bss(struct hostapd_data *hapd, int first, return -1; } + if (conf->bridge[0]) { + /* multicast to unicast on bridge ports */ + if (conf->bridge_multicast_to_unicast) { + hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_MCAST2UCAST, 1); + } + + /* hairpin mode */ + if (conf->bridge_hairpin) { + hostapd_drv_br_port_set_attr(hapd, DRV_BR_PORT_ATTR_HAIRPIN_MODE, 1); + } + } + if (conf->proxy_arp) { if (x_snoop_init(hapd)) { wpa_printf(MSG_ERROR, diff --git a/src/drivers/driver.h b/src/drivers/driver.h index 46182552d..b205744d0 100644 --- a/src/drivers/driver.h +++ b/src/drivers/driver.h @@ -2647,6 +2647,7 @@ struct macsec_init_params { enum drv_br_port_attr { DRV_BR_PORT_ATTR_PROXYARP, DRV_BR_PORT_ATTR_HAIRPIN_MODE, + DRV_BR_PORT_ATTR_MCAST2UCAST, }; enum drv_br_net_param { diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c index 4db29f1d5..75825bd94 100644 --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c @@ -11615,6 +11615,8 @@ static const char * drv_br_port_attr_str(enum drv_br_port_attr attr) return "proxyarp_wifi"; case DRV_BR_PORT_ATTR_HAIRPIN_MODE: return "hairpin_mode"; + case DRV_BR_PORT_ATTR_MCAST2UCAST: + return "multicast_to_unicast"; } return NULL;