bridge转发eapol包

最近开发有需求需要linux bridge能够转发EAPOL 和BPDU 多播包,EAPOL Multicast 包的dst mac 地址为: 01-80-C2-00-00-03。BPDU包的目的mac地址为:01-80-C2-00-00-00。

在设置 sys/class/net/br-lan/bridge/group_fwd_mask 为0x9将这两种多播mac地址fwd enable的时候,发现以下error。

echo 9 > sys/class/net/br-lan/bridge/group_fwd_mask 
ash: write error: Invalid argument

查看后原因为BR_GROUPFWD_RESTRICTED规定了不能设置的3个转发位,分别为STP报文,PAUSE帧,和LACP聚合协议报文。

#define BR_GROUPFWD_RESTRICTED (BR_GROUPFWD_STP | BR_GROUPFWD_MACPAUSE | BR_GROUPFWD_LACP)

因此修改net/bridge/br_sysfs_br.c 中的group_fwd_mask_store()函数中屏蔽对val的check.

static ssize_t group_fwd_mask_store(struct device *d,
				    struct device_attribute *attr,
				    const char *buf,
				    size_t len)
{
	struct net_bridge *br = to_bridge(d);
	char *endp;
	unsigned long val;

	if (!ns_capable(dev_net(br->dev)->user_ns, CAP_NET_ADMIN))
		return -EPERM;

	val = simple_strtoul(buf, &endp, 0);
	if (endp == buf)
		return -EINVAL;
#if 0
	if (val & BR_GROUPFWD_RESTRICTED)
		return -EINVAL;
#endif
	br->group_fwd_mask = val;

	return len;
}

此时group_fwd_mask 设置成功,bpdu转发成功,但是eapol仍然不能转发,进一步查看后发现工程中打了如下openwrt patch。取消改patch后eapol可以转发到bridge其他port.

https://git.openwrt.org/?p=openwrt/openwrt.git;a=blob_plain;f=target/linux/generic/patches-3.18/640-bridge_no_eap_forward.patch;hb=7eeb254cc49c4e9f837c980826ec112b9404f341


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值