Merge "Move the delegated prefix validity check to IaPrefixOption class." into main

This commit is contained in:
Xiao Ma
2023-10-10 03:27:35 +00:00
committed by Gerrit Code Review

View File

@@ -18,6 +18,8 @@ package com.android.net.module.util.structs;
import static com.android.net.module.util.NetworkStackConstants.DHCP6_OPTION_IAPREFIX;
import android.util.Log;
import com.android.net.module.util.Struct;
import com.android.net.module.util.Struct.Field;
import com.android.net.module.util.Struct.Type;
@@ -52,6 +54,7 @@ import java.nio.ByteOrder;
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
*/
public class IaPrefixOption extends Struct {
private static final String TAG = IaPrefixOption.class.getSimpleName();
public static final int LENGTH = 25; // option length excluding IAprefix-options
@Field(order = 0, type = Type.S16)
@@ -77,6 +80,33 @@ public class IaPrefixOption extends Struct {
this.prefix = prefix.clone();
}
/**
* Check whether or not IA Prefix option in IA_PD option is valid per RFC8415#section-21.22.
*/
public boolean isValid(int t2) {
if (preferred < 0 || valid < 0) {
Log.w(TAG, "IA_PD option with invalid lifetime, preferred lifetime " + preferred
+ ", valid lifetime " + valid);
return false;
}
if (preferred > valid) {
Log.w(TAG, "IA_PD option with preferred lifetime " + preferred
+ " greater than valid lifetime " + valid);
return false;
}
if (prefixLen > 64) {
Log.w(TAG, "IA_PD option with prefix length " + prefixLen
+ " longer than 64");
return false;
}
// Either preferred lifetime or t2 might be 0 which is valid, then ignore it.
if (preferred != 0 && t2 != 0 && preferred < t2) {
Log.w(TAG, "preferred lifetime " + preferred + " is smaller than T2 " + t2);
return false;
}
return true;
}
/**
* Build an IA_PD prefix option with given specific parameters.
*/