Handle PDU session type Ethernet in NAS and SDAP
This commit is contained in:
@@ -197,6 +197,15 @@ void create_ue_ip_if(const char *ipv4, const char *ipv6, int ue_id, int pdu_sess
|
||||
start_sdap_tun_ue(ue_id, pdu_session_id, sock, ifname); // interface name suffix is ue_id+1
|
||||
}
|
||||
|
||||
void create_ue_eth_if(int ue_id, int pdu_session_id, bool is_default)
|
||||
{
|
||||
char ifname[IFNAMSIZ];
|
||||
tuntap_generate_ue_ifname(ifname, IFF_TAP, ue_id, is_default ? -1 : pdu_session_id);
|
||||
const int sock = tuntap_alloc(IFF_TAP, ifname);
|
||||
tap_config(ifname); // brings the interface up
|
||||
start_sdap_tun_ue(ue_id, pdu_session_id, sock, ifname);
|
||||
}
|
||||
|
||||
void remove_ip_if(nr_sdap_entity_t *entity)
|
||||
{
|
||||
DevAssert(entity != NULL);
|
||||
|
||||
@@ -62,5 +62,6 @@ void sdap_data_ind(int pdcp_entity,
|
||||
|
||||
void start_sdap_tun_gnb_first_ue_default_pdu_session(ue_id_t ue_id, int pdu_session_id);
|
||||
void create_ue_ip_if(const char *ipv4, const char *ipv6, int ue_id, int pdu_session_id, bool is_default);
|
||||
void create_ue_eth_if(int ue_id, int pdu_session_id, bool is_default);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1568,11 +1568,14 @@ static void handle_pdu_session_accept(const nr_ue_nas_t *nas, uint8_t *pdu_buffe
|
||||
|
||||
// process PDU Session: pass ID -1 to not append PDU ID to interface
|
||||
bool is_default = idx == 0;
|
||||
if (msg.pdu_addr_ie.pdu_length)
|
||||
if (msg.pdu_type == PDU_SESSION_TYPE_ETHER) {
|
||||
create_ue_eth_if(instance, sm_header.pdu_session_id, is_default);
|
||||
} else if (msg.pdu_addr_ie.pdu_length) {
|
||||
process_pdu_session_addr(&msg, instance, sm_header.pdu_session_id, is_default);
|
||||
else
|
||||
LOG_W(NAS, "Optional PDU Address IE was not provided\n");
|
||||
|
||||
} else {
|
||||
LOG_W(NAS, "Unhandled PDU session type %d, ignoring PDU session ID %d\n", msg.pdu_type, sm_header.pdu_session_id);
|
||||
}
|
||||
|
||||
set_qfi(msg.qos_rules.rule->qfi, sm_header.pdu_session_id, instance);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user