|
|
@@ -426,6 +426,18 @@ func TestXDP(t *testing.T) {
|
|
|
},
|
|
|
})
|
|
|
|
|
|
+ ipv4STUNBindingReqUDPZeroCsumTx := getIPv4STUNBindingReq(&ipv4Mutations{
|
|
|
+ udpHeaderFn: func(udpH header.UDP) {
|
|
|
+ udpH.SetChecksum(0)
|
|
|
+ },
|
|
|
+ })
|
|
|
+
|
|
|
+ ipv6STUNBindingReqUDPZeroCsumPass := getIPv6STUNBindingReq(&ipv6Mutations{
|
|
|
+ udpHeaderFn: func(udpH header.UDP) {
|
|
|
+ udpH.SetChecksum(0)
|
|
|
+ },
|
|
|
+ })
|
|
|
+
|
|
|
cases := []struct {
|
|
|
name string
|
|
|
packetIn []byte
|
|
|
@@ -865,6 +877,42 @@ func TestXDP(t *testing.T) {
|
|
|
}: uint64(len(ipv6STUNBindingReqSTUNFirstAttrPass)),
|
|
|
},
|
|
|
},
|
|
|
+ {
|
|
|
+ name: "ipv4 UDP zero csum TX",
|
|
|
+ packetIn: ipv4STUNBindingReqUDPZeroCsumTx,
|
|
|
+ wantCode: xdpActionTX,
|
|
|
+ wantPacketOut: getIPv4STUNBindingResp(),
|
|
|
+ wantMetrics: map[bpfCountersKey]uint64{
|
|
|
+ {
|
|
|
+ Af: uint8(bpfCounterKeyAfCOUNTER_KEY_AF_IPV4),
|
|
|
+ Pba: uint8(bpfCounterKeyPacketsBytesActionCOUNTER_KEY_PACKETS_TX_TOTAL),
|
|
|
+ ProgEnd: uint8(bpfCounterKeyProgEndCOUNTER_KEY_END_UNSPECIFIED),
|
|
|
+ }: 1,
|
|
|
+ {
|
|
|
+ Af: uint8(bpfCounterKeyAfCOUNTER_KEY_AF_IPV4),
|
|
|
+ Pba: uint8(bpfCounterKeyPacketsBytesActionCOUNTER_KEY_BYTES_TX_TOTAL),
|
|
|
+ ProgEnd: uint8(bpfCounterKeyProgEndCOUNTER_KEY_END_UNSPECIFIED),
|
|
|
+ }: uint64(len(getIPv4STUNBindingResp())),
|
|
|
+ },
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "ipv6 UDP zero csum PASS",
|
|
|
+ packetIn: ipv6STUNBindingReqUDPZeroCsumPass,
|
|
|
+ wantCode: xdpActionPass,
|
|
|
+ wantPacketOut: ipv6STUNBindingReqUDPZeroCsumPass,
|
|
|
+ wantMetrics: map[bpfCountersKey]uint64{
|
|
|
+ {
|
|
|
+ Af: uint8(bpfCounterKeyAfCOUNTER_KEY_AF_IPV6),
|
|
|
+ Pba: uint8(bpfCounterKeyPacketsBytesActionCOUNTER_KEY_PACKETS_PASS_TOTAL),
|
|
|
+ ProgEnd: uint8(bpfCounterKeyProgEndCOUNTER_KEY_END_INVALID_UDP_CSUM),
|
|
|
+ }: 1,
|
|
|
+ {
|
|
|
+ Af: uint8(bpfCounterKeyAfCOUNTER_KEY_AF_IPV6),
|
|
|
+ Pba: uint8(bpfCounterKeyPacketsBytesActionCOUNTER_KEY_BYTES_PASS_TOTAL),
|
|
|
+ ProgEnd: uint8(bpfCounterKeyProgEndCOUNTER_KEY_END_INVALID_UDP_CSUM),
|
|
|
+ }: uint64(len(ipv6STUNBindingReqUDPZeroCsumPass)),
|
|
|
+ },
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
server, err := NewSTUNServer(&STUNServerConfig{DeviceName: "fake", DstPort: defaultSTUNPort},
|