Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 221a1643 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Support SlicingConfig for 5G Slicing Configuration" into sc-dev

parents 683e49ba 687ffe58
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -505,4 +505,17 @@ interface IRadio extends @1.5::IRadio {
     * Response function is IRadioResponse.getCurrentCallsResponse_1_6()
     */
    oneway getCurrentCalls_1_6(int32_t serial);

    /**
     * Request to get the current slicing configuration including URSP rules and
     * NSSAIs (configured, allowed and rejected).
     * URSP stands for UE route selection policy and is defined in 3GPP TS 24.526
     * Section 4.2.
     * An NSSAI is a collection of network slices. Each network slice is identified by
     * an S-NSSAI and is represented by the struct SliceInfo. NSSAI and S-NSSAI
     * are defined in 3GPP TS 24.501.
     *
     * Response function is IRadioResponse.getSlicingConfigResponse()
     */
    oneway getSlicingConfig(int32_t serial);
};
+14 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import @1.6::RegStateResult;
import @1.6::RadioResponseInfo;
import @1.6::SetupDataCallResult;
import @1.6::SignalStrength;
import @1.6::SlicingConfig;

/**
 * Interface declaring response functions to solicited radio requests.
@@ -416,4 +417,17 @@ interface IRadioResponse extends @1.5::IRadioResponse {
     *   RadioError:CANCELLED
     */
    oneway getCurrentCallsResponse_1_6(RadioResponseInfo info, vec<Call> calls);

    /**
     * @param info Response info struct containing response type, serial no. and error
     * @param slicingConfig Current slicing configuration
     *
     * Valid errors returned:
     *   RadioError:NONE
     *   RadioError:RADIO_NOT_AVAILABLE
     *   RadioError:INTERNAL_ERR
     *   RadioError:MODEM_ERR
     */
    oneway getSlicingConfigResponse(RadioResponseInfo info,
            SlicingConfig slicingConfig);
};
+144 −0
Original line number Diff line number Diff line
@@ -971,3 +971,147 @@ struct OSAppId {
     */
    vec<uint8_t> osAppId;
};

/**
 * This struct represents the current slicing configuration.
 */
struct SlicingConfig {
    /**
     * This vector contains the current URSP rules. Empty vector represents that no
     * rules are configured.
     */
    vec<UrspRule> urspRules;
    /**
     * Struct containing all NSSAIs (list of slice info).
     */
    Nssais nsaids;
};

/**
 * This struct represents a single URSP rule as defined in 3GPP TS 24.526.
 */
struct UrspRule {
    /**
     * Precedence value in the range of 0 to 255. Higher value has lower
     * precedence.
     */
    uint8_t precedence;
    /**
     * Used as a matcher for network requests.
     */
    vec<TrafficDescriptor> trafficDescriptors;
    /**
     * List of routes (connection parameters) that must be used for requests
     * matching a trafficDescriptor.
     */
    vec<RouteSelectionDescriptor> routeSelectionDescriptor;
};


/**
 * This struct represents a single route selection descriptor as defined in
 * 3GPP TS 24.526.
 */
struct RouteSelectionDescriptor {
    /**
     * Precedence value in the range of 0 to 255. Higher value has lower
     * precedence.
     */
    uint8_t precedence;
    /**
     * Parameters defining this RouteSelectionDescriptor. The length of the vector
     * must be >= 1.
     */
    vec<RouteSelectionDescriptorParams> routeSelectionDescriptorParams;
};

/**
 * This struct represents a route selection descriptor. A valid struct must have
 * at least one of the vectors non-empty.
 */
struct RouteSelectionDescriptorParams {
    /**
     * Valid values are IP, IPV6 and IPV4V6.
     */
    OptionalPdpProtocolType sessionType;
    OptionalSscMode sscMode;
    /**
     * There can be 0 or more SliceInfo specified in a route descriptor.
     */
    vec<SliceInfo> sliceInfo;
    /**
     * DNN stands for Data Network Name and represents an APN as defined in
     * 3GPP TS 23.003. There can be 0 or more DNNs specified in a route
     * descriptor.
     */
    vec<string> dnn;
};

/**
 * This safe_union represents an optional PdpProtocolType.
 */
safe_union OptionalPdpProtocolType {
    Monostate noinit;
    PdpProtocolType value;
};

/**
 * This safe_union represents an optional SscMode.
 */
safe_union OptionalSscMode {
    Monostate noinit;
    SscMode value;
};

/**
 * This struct contains all NSSAIs (lists of slices).
 */
struct Nssais {
    /**
     * These are all the slices configured by the network. This includes allowed
     * and rejected slices, as well as slices that are neither allowed nor rejected
     * yet. Empty vector indicates that no slices are configured, and in that case
     * allowed and rejected vectors must be empty as well.
     */
    vec<SliceInfo> configured;
    /**
     * These are all the slices that the UE is allowed to use. All these slices
     * must be configured as well. Empty vector indicates that no slices are
     * allowed yet.
     */
    vec<SliceInfo> allowed;
    /**
     * These are all the slices that the UE is not allowed to use. All these slices
     * must be configured as well. Empty vector indicates that no slices are
     * rejected yet.
     */
    vec<RejectedSliceInfo> rejected;
    /**
     * Default configured NSSAI
     */
    vec<SliceInfo> defaultConfigured;
};

/**
 * This struct represents a network slice rejected by the network. It contains a
 * rejectionCause corresponding to a rejected network slice.
 */
struct RejectedSliceInfo {
    SliceInfo sliceInfo;
    SliceRejectionCause rejectionCause;
};

enum SliceRejectionCause : int32_t {
    NOT_AVAILABLE_IN_PLMN,
    NOT_AVAILABLE_IN_REG_AREA,
};

/**
 * Enum representing session and service continuity mode as defined in
 * 3GPP TS 23.501.
 */
enum SscMode : int32_t {
    MODE_1 = 1,
    MODE_2 = 2,
    MODE_3 = 3,
};
+12 −0
Original line number Diff line number Diff line
@@ -163,6 +163,18 @@ TEST_P(RadioHidlTest_v1_6, setupDataCall_1_6_osAppId) {
    }
}

/*
 * Test IRadio.getSlicingConfig() for the response returned.
 */
TEST_P(RadioHidlTest_v1_6, getSlicingConfig) {
    serial = GetRandomSerialNumber();
    radio_v1_6->getSlicingConfig(serial);
    EXPECT_EQ(std::cv_status::no_timeout, wait());
    EXPECT_EQ(RadioResponseType::SOLICITED, radioRsp_v1_6->rspInfo.type);
    EXPECT_EQ(serial, radioRsp_v1_6->rspInfo.serial);
    EXPECT_EQ(::android::hardware::radio::V1_6::RadioError::NONE, radioRsp_v1_6->rspInfo.error);
}

/*
 * Test IRadio_1_6.sendSms() for the response returned.
 */
+4 −0
Original line number Diff line number Diff line
@@ -827,6 +827,10 @@ class RadioResponse_v1_6 : public ::android::hardware::radio::V1_6::IRadioRespon
    Return<void> getCurrentCallsResponse_1_6(
            const ::android::hardware::radio::V1_6::RadioResponseInfo& info,
            const ::android::hardware::hidl_vec<::android::hardware::radio::V1_6::Call>& calls);

    Return<void> getSlicingConfigResponse(
            const ::android::hardware::radio::V1_6::RadioResponseInfo& info,
            const ::android::hardware::radio::V1_6::SlicingConfig& slicingConfig);
};

/* Callback class for radio indication */
Loading