Merge "clat: enable PACKET_VNET_HDR on v6 ingress" am: b21fe216cc
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Connectivity/+/2486115
Change-Id: I6f1d5cc6b89713dc23504b43aefb4aa83e3d6e8e
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp
index dae45f3..062d272 100644
--- a/service/jni/com_android_server_connectivity_ClatCoordinator.cpp
+++ b/service/jni/com_android_server_connectivity_ClatCoordinator.cpp
@@ -182,12 +182,19 @@
throwIOException(env, "packet socket failed", errno);
return -1;
}
- int on = 1;
+ const int on = 1;
+ // enable tpacket_auxdata cmsg delivery, which includes L2 header length
if (setsockopt(sock, SOL_PACKET, PACKET_AUXDATA, &on, sizeof(on))) {
throwIOException(env, "packet socket auxdata enablement failed", errno);
close(sock);
return -1;
}
+ // needed for virtio_net_hdr prepending, which includes checksum metadata
+ if (setsockopt(sock, SOL_PACKET, PACKET_VNET_HDR, &on, sizeof(on))) {
+ throwIOException(env, "packet socket vnet_hdr enablement failed", errno);
+ close(sock);
+ return -1;
+ }
return sock;
}