@@ -240,7 +240,7 @@ static __always_inline int nat_metric_try_report_v4(struct nat_timer_key_v4 *tim
240240 event -> egress_bytes = timer_value -> egress_bytes ;
241241 event -> egress_packets = timer_value -> egress_packets ;
242242 event -> cpu_id = timer_value -> cpu_id ;
243- event -> ifindex = timer_key -> wan_ifindex ;
243+ event -> ifindex = timer_value -> ifindex ;
244244 event -> status = status ;
245245 event -> gress = timer_value -> gress ;
246246 bpf_ringbuf_submit (event , 0 );
@@ -389,15 +389,13 @@ release:;
389389 egress_mapping_key .gress = NAT_MAPPING_EGRESS ;
390390 egress_mapping_key .from_addr = value -> client_addr .addr ;
391391 egress_mapping_key .from_port = value -> client_port ;
392- egress_mapping_key .wan_ifindex = key -> wan_ifindex ;
393392
394393 // ingress key: {INGRESS, proto, Pn, An} — from key
395394 struct nat_mapping_key_v4 ingress_mapping_key = {0 };
396395 ingress_mapping_key .l4proto = key -> l4proto ;
397396 ingress_mapping_key .gress = NAT_MAPPING_INGRESS ;
398397 ingress_mapping_key .from_addr = key -> pair_ip .dst_addr .addr ;
399398 ingress_mapping_key .from_port = key -> pair_ip .dst_port ;
400- ingress_mapping_key .wan_ifindex = key -> wan_ifindex ;
401399
402400 // Check if static: lookup egress mapping, if is_static don't delete mapping entries
403401 struct nat_mapping_value_v4 * egress_val =
@@ -457,7 +455,6 @@ static __always_inline int lookup_or_new_ct(struct __sk_buff *skb, u8 l4proto, b
457455 u8 flow_id = get_flow_id (skb -> mark );
458456
459457 timer_key .l4proto = l4proto ;
460- timer_key .wan_ifindex = skb -> ifindex ;
461458 // CT key = {As:Ps, An:Pn}
462459 __builtin_memcpy (& timer_key .pair_ip , server_nat_pair , sizeof (timer_key .pair_ip ));
463460
@@ -479,6 +476,7 @@ static __always_inline int lookup_or_new_ct(struct __sk_buff *skb, u8 l4proto, b
479476 timer_value_new .create_time = bpf_ktime_get_ns ();
480477 timer_value_new .flow_id = flow_id ;
481478 timer_value_new .cpu_id = bpf_get_smp_processor_id ();
479+ timer_value_new .ifindex = skb -> ifindex ;
482480 timer_value = insert_new_nat_timer (l4proto , & timer_key , & timer_value_new );
483481 if (timer_value == NULL ) {
484482 return TIMER_ERROR ;
@@ -497,7 +495,6 @@ insert_mappings_v4(const struct nat_mapping_key_v4 *key, const struct nat_mappin
497495 struct nat_mapping_key_v4 key_rev = {
498496 .gress = key -> gress ^ GRESS_MASK ,
499497 .l4proto = key -> l4proto ,
500- .wan_ifindex = key -> wan_ifindex ,
501498 .from_addr = val -> addr ,
502499 .from_port = val -> port ,
503500 };
@@ -550,14 +547,9 @@ static int search_port_callback_v4(u32 index, struct search_port_ctx_v4 *ctx) {
550547 .gress = NAT_MAPPING_INGRESS ,
551548 .l4proto = ctx -> ingress_key .l4proto ,
552549 .from_port = ctx -> ingress_key .from_port ,
553- .wan_ifindex = ctx -> ingress_key .wan_ifindex ,
554550 .from_addr = 0 ,
555551 };
556552 struct nat_mapping_value_v4 * static_val = bpf_map_lookup_elem (& nat4_mappings , & static_key );
557- if (!static_val ) {
558- static_key .wan_ifindex = 0 ;
559- static_val = bpf_map_lookup_elem (& nat4_mappings , & static_key );
560- }
561553 if (!static_val ) {
562554 ctx -> found = true;
563555 return BPF_LOOP_RET_BREAK ;
@@ -592,7 +584,6 @@ ingress_lookup_or_new_mapping4(struct __sk_buff *skb, u8 ip_protocol,
592584 .gress = NAT_MAPPING_INGRESS ,
593585 .l4proto = ip_protocol ,
594586 .from_port = pkt_ip_pair -> dst_port ,
595- .wan_ifindex = skb -> ifindex ,
596587 .from_addr = pkt_ip_pair -> dst_addr .addr ,
597588 };
598589
@@ -603,10 +594,6 @@ ingress_lookup_or_new_mapping4(struct __sk_buff *skb, u8 ip_protocol,
603594 // Fallback: try addr=0 for static mapping {INGRESS, proto, Pn, 0}
604595 ingress_key .from_addr = 0 ;
605596 nat_ingress_value = bpf_map_lookup_elem (& nat4_mappings , & ingress_key );
606- if (!nat_ingress_value ) {
607- ingress_key .wan_ifindex = 0 ;
608- nat_ingress_value = bpf_map_lookup_elem (& nat4_mappings , & ingress_key );
609- }
610597 if (!nat_ingress_value ) {
611598 return TC_ACT_SHOT ;
612599 }
@@ -629,31 +616,19 @@ egress_lookup_or_new_mapping_v4(struct __sk_buff *skb, u8 ip_protocol, bool allo
629616 u64 curent_time = bpf_ktime_get_ns ();
630617 struct nat_mapping_key_v4 egress_key = {
631618 .gress = NAT_MAPPING_EGRESS ,
632- .l4proto = ip_protocol , // 原有的 l4 层协议值
633- .from_port = pkt_ip_pair -> src_port , // 数据包中的 内网端口
634- .wan_ifindex = skb -> ifindex ,
619+ .l4proto = ip_protocol , // 原有的 l4 层协议值
620+ .from_port = pkt_ip_pair -> src_port , // 数据包中的 内网端口
635621 .from_addr = pkt_ip_pair -> src_addr .addr , // 内网原始地址
636622 };
637623
638624 // 倒置的值
639625 struct nat_mapping_value_v4 * nat_ingress_value = NULL ;
640626 struct nat_mapping_value_v4 * nat_egress_value =
641627 bpf_map_lookup_elem (& nat4_mappings , & egress_key );
642- if (!nat_egress_value ) {
643- // Support wildcard-WAN static host mappings; dynamic entries never use ifindex=0.
644- egress_key .wan_ifindex = 0 ;
645- nat_egress_value = bpf_map_lookup_elem (& nat4_mappings , & egress_key );
646- egress_key .wan_ifindex = skb -> ifindex ;
647- }
648628 if (!nat_egress_value ) {
649629 // Fallback: try addr=0 for static mapping targeting local router
650630 egress_key .from_addr = 0 ;
651631 nat_egress_value = bpf_map_lookup_elem (& nat4_mappings , & egress_key );
652- if (!nat_egress_value ) {
653- egress_key .wan_ifindex = 0 ;
654- nat_egress_value = bpf_map_lookup_elem (& nat4_mappings , & egress_key );
655- }
656- egress_key .wan_ifindex = skb -> ifindex ;
657632 egress_key .from_addr = pkt_ip_pair -> src_addr .addr ;
658633 }
659634 if (!nat_egress_value ) {
@@ -688,7 +663,6 @@ egress_lookup_or_new_mapping_v4(struct __sk_buff *skb, u8 ip_protocol, bool allo
688663 {
689664 .gress = NAT_MAPPING_INGRESS ,
690665 .l4proto = ip_protocol ,
691- .wan_ifindex = skb -> ifindex ,
692666 .from_addr = new_nat_egress_value .addr ,
693667 .from_port = new_nat_egress_value .port ,
694668 },
@@ -750,8 +724,7 @@ egress_lookup_or_new_mapping_v4(struct __sk_buff *skb, u8 ip_protocol, bool allo
750724 // 已经存在就查询另外一个值 并进行刷新时间
751725 struct nat_mapping_key_v4 ingress_key = {
752726 .gress = NAT_MAPPING_INGRESS ,
753- .l4proto = ip_protocol , // 原有的 l4 层协议值
754- .wan_ifindex = egress_key .wan_ifindex ,
727+ .l4proto = ip_protocol , // 原有的 l4 层协议值
755728 .from_port = nat_egress_value -> port , // 数据包中的 内网端口
756729 .from_addr = nat_egress_value -> addr , // 内网原始地址
757730 };
0 commit comments