use/test pmtu from TetherOffloadRuleParcel

Tested: atest
Bug: 149816401
Signed-off-by: Maciej Żenczykowski <maze@google.com>
Original-Change: https://android-review.googlesource.com/1316720
Merged-In: Id8a91ed5c0176b41c079ede5533af90b8756de6b
Change-Id: Id8a91ed5c0176b41c079ede5533af90b8756de6b
diff --git a/tests/binder_test.cpp b/tests/binder_test.cpp
index 0b62ff0..cd7567a 100644
--- a/tests/binder_test.cpp
+++ b/tests/binder_test.cpp
@@ -3515,7 +3515,7 @@
                                               const std::vector<uint8_t>& destination,
                                               int prefixLength,
                                               const std::vector<uint8_t>& srcL2Address,
-                                              const std::vector<uint8_t>& dstL2Address) {
+                                              const std::vector<uint8_t>& dstL2Address, int pmtu) {
     android::net::TetherOffloadRuleParcel parcel;
     parcel.inputInterfaceIndex = inputInterfaceIndex;
     parcel.outputInterfaceIndex = outputInterfaceIndex;
@@ -3523,6 +3523,7 @@
     parcel.prefixLength = prefixLength;
     parcel.srcL2Address = srcL2Address;
     parcel.dstL2Address = dstL2Address;
+    parcel.pmtu = pmtu;
     return parcel;
 }
 
@@ -3546,32 +3547,34 @@
 
     // Invalid IP address, add rule
     TetherOffloadRuleParcel rule = makeTetherOffloadRule(
-            kIfaceExt, kIfaceInt, kInvalidAddr4 /*bad*/, 128, kSrcMac, kDstMac);
+            kIfaceExt, kIfaceInt, kInvalidAddr4 /*bad*/, 128, kSrcMac, kDstMac, 1500);
     auto status = mNetd->tetherOffloadRuleAdd(rule);
     EXPECT_FALSE(status.isOk());
     EXPECT_EQ(EAFNOSUPPORT, status.serviceSpecificErrorCode());
 
     // Invalid source L2 address, add rule
-    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kInvalidMac /*bad*/, kDstMac);
+    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kInvalidMac /*bad*/, kDstMac,
+                                 1500);
     status = mNetd->tetherOffloadRuleAdd(rule);
     EXPECT_FALSE(status.isOk());
     EXPECT_EQ(ENXIO, status.serviceSpecificErrorCode());
 
     // Invalid destination L2 address, add rule
-    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kSrcMac, kInvalidMac /*bad*/);
+    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kSrcMac, kInvalidMac /*bad*/,
+                                 1500);
     status = mNetd->tetherOffloadRuleAdd(rule);
     EXPECT_FALSE(status.isOk());
     EXPECT_EQ(ENXIO, status.serviceSpecificErrorCode());
 
     // Invalid IP address, remove rule
-    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kInvalidAddr4 /*bad*/, 128, kSrcMac,
-                                 kDstMac);
+    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kInvalidAddr4 /*bad*/, 128, kSrcMac, kDstMac,
+                                 1500);
     status = mNetd->tetherOffloadRuleRemove(rule);
     EXPECT_FALSE(status.isOk());
     EXPECT_EQ(EAFNOSUPPORT, status.serviceSpecificErrorCode());
 
     // Invalid prefix length
-    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 64 /*bad*/, kSrcMac, kDstMac);
+    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 64 /*bad*/, kSrcMac, kDstMac, 1500);
     status = mNetd->tetherOffloadRuleAdd(rule);
     EXPECT_FALSE(status.isOk());
     EXPECT_EQ(EINVAL, status.serviceSpecificErrorCode());
@@ -3580,21 +3583,33 @@
     EXPECT_EQ(EINVAL, status.serviceSpecificErrorCode());
 
     // Invalid interface index
-    rule = makeTetherOffloadRule(kIfaceExt, 0, kAddr6, 128, kSrcMac, kDstMac);
+    rule = makeTetherOffloadRule(kIfaceExt, 0, kAddr6, 128, kSrcMac, kDstMac, 1500);
     status = mNetd->tetherOffloadRuleAdd(rule);
     EXPECT_FALSE(status.isOk());
     EXPECT_EQ(ENODEV, status.serviceSpecificErrorCode());
-    rule = makeTetherOffloadRule(0, kIfaceInt, kAddr6, 64, kSrcMac, kDstMac);
+    rule = makeTetherOffloadRule(0, kIfaceInt, kAddr6, 64, kSrcMac, kDstMac, 1500);
     status = mNetd->tetherOffloadRuleRemove(rule);
     EXPECT_FALSE(status.isOk());
     EXPECT_EQ(ENODEV, status.serviceSpecificErrorCode());
 
+    // Invalid pmtu (too low)
+    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kSrcMac, kDstMac, 1279);
+    status = mNetd->tetherOffloadRuleAdd(rule);
+    EXPECT_FALSE(status.isOk());
+    EXPECT_EQ(EINVAL, status.serviceSpecificErrorCode());
+
+    // Invalid pmtu (too high)
+    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kSrcMac, kDstMac, 65536);
+    status = mNetd->tetherOffloadRuleAdd(rule);
+    EXPECT_FALSE(status.isOk());
+    EXPECT_EQ(EINVAL, status.serviceSpecificErrorCode());
+
     // Remove non existent rule. Expect that silently return success if the rule did not exist.
-    rule = makeTetherOffloadRule(kIfaceNonExistent, kIfaceInt, kAddr6, 128, kSrcMac, kDstMac);
+    rule = makeTetherOffloadRule(kIfaceNonExistent, kIfaceInt, kAddr6, 128, kSrcMac, kDstMac, 1500);
     EXPECT_TRUE(mNetd->tetherOffloadRuleRemove(rule).isOk());
 
     // Add and remove rule normally.
-    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kSrcMac, kDstMac);
+    rule = makeTetherOffloadRule(kIfaceExt, kIfaceInt, kAddr6, 128, kSrcMac, kDstMac, 1500);
     EXPECT_TRUE(mNetd->tetherOffloadRuleAdd(rule).isOk());
     EXPECT_TRUE(mNetd->tetherOffloadRuleRemove(rule).isOk());
 }
@@ -3693,7 +3708,7 @@
     std::vector<uint8_t> dstAddr(daddr, daddr + sizeof(pkt.hdr.daddr));
 
     TetherOffloadRuleParcel rule = makeTetherOffloadRule(sTun.ifindex(), tap.ifindex(), dstAddr,
-                                                         128, kDummyMac, kDummyMac);
+                                                         128, kDummyMac, kDummyMac, sizeof(pkt));
     status = mNetd->tetherOffloadRuleAdd(rule);
     EXPECT_TRUE(status.isOk()) << status.exceptionMessage();