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
|
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)
|
void remove_ip_if(nr_sdap_entity_t *entity)
|
||||||
{
|
{
|
||||||
DevAssert(entity != NULL);
|
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 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_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
|
#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
|
// process PDU Session: pass ID -1 to not append PDU ID to interface
|
||||||
bool is_default = idx == 0;
|
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);
|
process_pdu_session_addr(&msg, instance, sm_header.pdu_session_id, is_default);
|
||||||
else
|
} else {
|
||||||
LOG_W(NAS, "Optional PDU Address IE was not provided\n");
|
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);
|
set_qfi(msg.qos_rules.rule->qfi, sm_header.pdu_session_id, instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user