lan/wan绑定

Common notes

lan/wan绑定的理解

网络拓扑:

  • ge1 ipv4/v6双栈 不设置ipv6地址 绑定lan4
  • LAN1 ipv4/v6双栈 设置ipv6地址,生成v6的默认路由,绑定lan3
  • LAN/WAN绑定的转发路由与普通三层无异,经历的netfilter挂载点均有效

目前lan/wan绑定的代码:

  • ge1,不设置ipv6地址,会获取bind_node
  • 且获得的ipv6网关是**::/0**,而不是NULL,即使本机不存在v6的默认路由
  • 出口设备是ge1
    用ge1和这个全0的网关去查路由表,是查不到结果的,所以路由返回不可达,包drop掉,之前的代码里应该也考虑了bug单描述的情况

所以与ipv4的lan/wan绑定类似,bind_node的下一跳为0或者出口设备为空,可认为是存在绑定关系却绑定失败,直接drop包

根据接口名获取vlanid

常见的wan接口名可能包括wan、wan.xx、pon.xx或者lan1.xx,那么怎么获取该wan口的vlanid可以通过如下

int get_vlanid_by_ifname(char *ifname){
	if(!is_wan_if(ifname))
		return -1;
	int vlanid = 0;
	char *dotptr = NULL;
	dotptr = strchr(ifname,'.');
	if(dotptr)
		vlanid = atoi(dotptr+1); 
	return vlanid;
}

判断ipv4/ipv6的地址是否为全0

ipv4地址:u32表示无符号int基本整数类型,所以可以直接与0进行比较

u32 addr4 = xxx;
if (addr4 == 0)
	return 1;

ipv6地址:利用struct in6_addr进行储存,不可以直接与**::/0**进行比较

#define IN6_IS_ADDR_DEFAULT(addr6) \
	(((__const u_int32 t *)(addr6))[0] == 0 \
&&	((__const u_int32 t *)(addr6))[1] == 0 \
&&	((__const u_int32 t *)(addr6))[2] == 0 \
&&	((__const u_int32 t *)(addr6))[3] == 0) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值