Skip to content

Commit

Permalink
Extended masq_key to include destination ip
Browse files Browse the repository at this point in the history
  • Loading branch information
r-caamano committed Aug 1, 2024
1 parent 3a0683a commit b379051
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/zfw_tc_ingress.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,10 @@ struct tuple_key {
/*Key to masquerade_map*/
struct masq_key {
uint32_t ifindex;
union {
__u32 ip;
__u32 ip6[4];
}__in46_u_dest;
__u8 protocol;
__u16 sport;
__u16 dport;
Expand Down Expand Up @@ -1407,6 +1411,7 @@ int bpf_sk_splice(struct __sk_buff *skb){
}
if(local_diag->masquerade && local_ip4 && local_ip4->count && (local_ip4->ipaddr[0] == tuple->ipv4.daddr)){
struct masq_key mk = {0};
mk.__in46_u_dest.ip = tuple->ipv4.saddr;
mk.dport = tuple->ipv4.sport;
mk.sport = tuple->ipv4.dport;
mk.ifindex = skb->ifindex;
Expand Down Expand Up @@ -1551,6 +1556,7 @@ int bpf_sk_splice(struct __sk_buff *skb){
}else{
if(local_diag->masquerade && local_ip4 && local_ip4->count && (local_ip4->ipaddr[0] == tuple->ipv4.daddr)){
struct masq_key mk = {0};
mk.__in46_u_dest.ip = tuple->ipv4.saddr;
mk.dport = tuple->ipv4.sport;
mk.sport = tuple->ipv4.dport;
mk.ifindex = skb->ifindex;
Expand Down Expand Up @@ -1698,6 +1704,7 @@ int bpf_sk_splice(struct __sk_buff *skb){
&& (local_ip6->ipaddr[0][1] == tuple->ipv6.daddr[1]) && (local_ip6->ipaddr[0][2] == tuple->ipv6.daddr[2])
&& (local_ip6->ipaddr[0][3] == tuple->ipv6.daddr[3])){
struct masq_key mk = {0};
memcpy(mk.__in46_u_dest.ip6, tuple->ipv6.saddr, sizeof(tuple->ipv6.saddr));
mk.dport = tuple->ipv6.sport;
mk.sport = tuple->ipv6.dport;
mk.ifindex = skb->ifindex;
Expand Down Expand Up @@ -1826,6 +1833,7 @@ int bpf_sk_splice(struct __sk_buff *skb){
return TC_ACT_SHOT;
}
struct masq_key mk = {0};
memcpy(mk.__in46_u_dest.ip6, tuple->ipv6.saddr, sizeof(tuple->ipv6.saddr));
mk.dport = tuple->ipv6.sport;
mk.sport = tuple->ipv6.dport;
mk.ifindex = skb->ifindex;
Expand Down
8 changes: 8 additions & 0 deletions src/zfw_tc_outbound_track.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,10 @@ struct udp_state {
/*Key to masquerade_map*/
struct masq_key {
uint32_t ifindex;
union {
__u32 ip;
__u32 ip6[4];
}__in46_u_dest;
__u8 protocol;
__u16 sport;
__u16 dport;
Expand Down Expand Up @@ -2098,6 +2102,7 @@ int bpf_sk_splice6(struct __sk_buff *skb){
struct masq_value mv = {0};
mv.__in46_u_origin.ip = tuple->ipv4.saddr;
struct masq_key mk = {0};
mk.__in46_u_dest.ip = tuple->ipv4.daddr;
mk.dport = tuple->ipv4.dport;
mk.sport = tuple->ipv4.sport;
mk.ifindex = skb->ifindex;
Expand Down Expand Up @@ -2250,6 +2255,7 @@ int bpf_sk_splice6(struct __sk_buff *skb){
struct masq_value mv = {0};
mv.__in46_u_origin.ip = tuple->ipv4.saddr;
struct masq_key mk = {0};
mk.__in46_u_dest.ip = tuple->ipv4.daddr;
mk.dport = tuple->ipv4.dport;
mk.sport = tuple->ipv4.sport;
mk.ifindex = skb->ifindex;
Expand Down Expand Up @@ -2357,6 +2363,7 @@ int bpf_sk_splice6(struct __sk_buff *skb){
struct masq_value mv = {0};
memcpy(mv.__in46_u_origin.ip6, tuple->ipv6.saddr, sizeof(mv.__in46_u_origin.ip6));
struct masq_key mk = {0};
memcpy(mk.__in46_u_dest.ip6, tuple->ipv6.daddr, sizeof(tuple->ipv6.daddr));
mk.dport = tuple->ipv6.dport;
mk.sport = tuple->ipv6.sport;
mk.ifindex = skb->ifindex;
Expand Down Expand Up @@ -2489,6 +2496,7 @@ int bpf_sk_splice6(struct __sk_buff *skb){
struct masq_value mv = {0};
memcpy(mv.__in46_u_origin.ip6, tuple->ipv6.saddr, sizeof(mv.__in46_u_origin.ip6));
struct masq_key mk = {0};
memcpy(mk.__in46_u_dest.ip6, tuple->ipv6.daddr, sizeof(tuple->ipv6.daddr));
mk.dport = tuple->ipv6.dport;
mk.sport = tuple->ipv6.sport;
mk.ifindex = skb->ifindex;
Expand Down

0 comments on commit b379051

Please sign in to comment.