Handle PDU session type Ethernet in NAS and SDAP

This commit is contained in:
Robert Schmidt
2026-01-27 11:47:40 +01:00
parent 78720d5d9c
commit dc968d4dc9
3 changed files with 17 additions and 4 deletions
+9
View File
@@ -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);
+1
View File
@@ -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
+7 -4
View File
@@ -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);
}