Skip to content

Commit fc86fc0

Browse files
committed
FIXUP: feat(gtpv2): implement cause and ebi
1 parent df6ab35 commit fc86fc0

File tree

3 files changed

+168
-0
lines changed

3 files changed

+168
-0
lines changed
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package com.sipgate.udpproxy.udp.payload.gtpv2.ie;
2+
3+
import com.sipgate.udpproxy.udp.payload.gtpv2.ie.decoder.BitHelper;
4+
5+
public class Cause extends InformationElement {
6+
public Cause(final byte type, final byte spare, final byte instance, final byte[] payload) {
7+
super(type, spare, instance, payload);
8+
}
9+
10+
public int getCause() {
11+
return BitHelper.toInt(payload[0]);
12+
}
13+
14+
public CauseType getCauseType() {
15+
return CauseType.fromValue(BitHelper.toInt(payload[0]));
16+
}
17+
18+
public boolean isCauseSource() {
19+
return BitHelper.isBitSet(payload[1], 1);
20+
}
21+
22+
public boolean isBearerContextIeError() {
23+
return BitHelper.isBitSet(payload[1], 2);
24+
}
25+
26+
public boolean isPdnConnectionIeError() {
27+
return BitHelper.isBitSet(payload[1], 3);
28+
}
29+
30+
public enum CauseType {
31+
RESERVED_0(0),
32+
RESERVED_1(1),
33+
LOCAL_DETACH(2),
34+
COMPLETE_DETACH(3),
35+
RAT_CHANGED_FROM_3GPP_TO_NON_3GPP(4),
36+
ISR_DEACTIVATION(5),
37+
ERROR_INDICATION_RECEIVED_FROM_RNC_ENB_SGSN_OR_MME(6),
38+
IMSI_DETACH_ONLY(7),
39+
REACTIVATION_REQUESTED(8),
40+
PDN_RECONNECTION_TO_THIS_APN_DISALLOWED(9),
41+
ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP(10),
42+
PDN_CONNECTION_INACTIVITY_TIMER_EXPIRED(11),
43+
PGW_NOT_RESPONDING(12),
44+
NETWORK_FAILURE(13),
45+
QOS_PARAMETERS_REJECTED(14),
46+
EPS_TO_5GS_MOBILITY(15),
47+
REQUEST_ACCEPTED(16),
48+
REQUEST_ACCEPTED_PARTIALLY(17),
49+
NEW_PDN_TYPE_NETWORK_PREFERENCE(18),
50+
NEW_PDN_TYPE_SINGLE_ADDRESS_BEARER_ONLY(19),
51+
// 23 - 63 spare
52+
CONTEXT_NOT_FOUND(64),
53+
INVALID_MESSAGE_FORMAT(65),
54+
VERSION_NOT_SUPPORTED_BY_NEXT_PEER(66),
55+
INVALID_LENGTH(67),
56+
SERVICE_NOT_SUPPORTED(68),
57+
MANDATORY_IE_INCORRECT(69),
58+
MANDATORY_IE_MISSING(70),
59+
// 71: Shall not be used
60+
SYSTEM_FAILURE(72),
61+
NO_RESOURCES_AVAILABLE(73),
62+
SEMANTIC_ERROR_IN_THE_TFT_OPERATION(74),
63+
SYNTACTIC_ERROR_IN_THE_TFT_OPERATION(75),
64+
SEMANTIC_ERRORS_IN_PACKET_FILTER(76),
65+
SYNTACTIC_ERRORS_IN_PACKET_FILTER(77),
66+
MISSING_OR_UNKNOWN_APN(78),
67+
// 79: Shall not be used
68+
GRE_KEY_NOT_FOUND(80),
69+
RELOCATION_FAILURE(81),
70+
DENIED_IN_RAT(82),
71+
PREFERRED_PDN_TYPE_NOT_SUPPORTED(83),
72+
ALL_DYNAMIC_ADDRESSES_ARE_OCCUPIED(84),
73+
UE_CONTEXT_WITHOUT_TFT_ALREADY_ACTIVATED(85),
74+
PROTOCOL_TYPE_NOT_SUPPORTED(86),
75+
UE_NOT_RESPONDING(87),
76+
UE_REFUSES(88),
77+
SERVICE_DENIED(89),
78+
UNABLE_TO_PAGE_UE(90),
79+
NO_MEMORY_AVAILABLE(91),
80+
USER_AUTHENTICATION_FAILED(92),
81+
APN_ACCESS_DENIED_NO_SUBSCRIPTION(93),
82+
REQUEST_REJECTED(94),
83+
P_TMSI_SIGNATURE_MISMATCH(95),
84+
IMSI_IMEI_NOT_KNOWN(96),
85+
SEMANCTIC_ERROR_IN_THE_TAD_OPERATION(97),
86+
SYNTACTIC_ERROR_IN_THE_TAD_OPERATION(98),
87+
// 99: Shall not be used
88+
REMOTE_PEER_NOT_RESPONDING(100),
89+
COLLISION_WITH_NETWORK_INITIATED_REQUEST(101),
90+
UNABLE_TO_PAGE_UE_DUE_TO_SUSPENSION(102),
91+
CONDITIONAL_IE_MISSING(103),
92+
APN_RESTRICTION_TYPE_INCOMPATIBLE_WITH_CURRENTLY_ACTIVE_PDN_CONNECTION(104),
93+
INVALID_OVERALL_LENGTH_OF_THE_TRIGGERED_RESPONSE_MESSAGE(105),
94+
DATA_FORWARDING_NOT_SUPPORTED(106),
95+
INVALID_REPLY_FROM_REMOTE_PEER(107),
96+
FALLBACK_TO_GTPV1(108),
97+
INVALID_PEER(109),
98+
TEMPORARILY_REJECTED_DUE_TO_HO_PROCEDURE(110),
99+
MODIFICATIONS_NOT_LIMITED_TO_S1_U_BEARERS(111),
100+
REQUEST_REJECTED_FOR_PMIPV6_REASON(112),
101+
APN_CONGESTION(113),
102+
BEARER_HANDLING_NOT_SUPPORTED(114),
103+
UE_ALREADY_RE_ATTACHED(115),
104+
MULTIPLE_PDN_CONNECTION_FOR_A_GIVEN_APN_NOT_ALLOWED(116),
105+
TARGET_ACCESS_RESTRICTED_FOR_THE_SUBSCRIBER(117),
106+
// 118: Shall not be used
107+
MME_SGSN_REFUSES_DUE_TO_VPLMN_POLICY(119),
108+
GTP_C_ENTITY_CONGESTION(120),
109+
LATE_OVERLAPPING_REQUEST(121),
110+
TIMED_OUT_REQUEST(122),
111+
UE_IS_TEMPORARILY_NOT_REACHABLE_DUE_TO_POWER_SAVING(123),
112+
RELOCATION_FAILURE_DUE_TO_NAS_MESSAGE_REDIRECTION(124),
113+
UE_NOT_AUTHORIZED_BY_OCS_OR_EXTERNAL_AAA_SERVER(125),
114+
MULTIPLE_ACCESS_TO_A_PDN_CONNECTION_NOT_ALLOWED(126),
115+
REQUEST_REJECTED_DUE_TO_UE_CAPABILITY(127),
116+
S1_U_PATH_FAILURE(128),
117+
NOT_ALLOWED_5GC(129),
118+
PGW_MISMATCH_WITH_NETWORK_SLICE_SUBSCRIBED_BY_THE_UE(130),
119+
REJECTION_DUE_TO_PAGING_RESTRICTION(131),
120+
// 132 - 255: Spare
121+
;
122+
123+
124+
private final int value;
125+
126+
CauseType(final int value) {
127+
this.value = value;
128+
}
129+
130+
public int getValue() {
131+
return value;
132+
}
133+
134+
public static CauseType fromValue(final int value) {
135+
for (final var causeType : values()) {
136+
if (causeType.getValue() == value) {
137+
return causeType;
138+
}
139+
}
140+
return null;
141+
}
142+
}
143+
144+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.sipgate.udpproxy.udp.payload.gtpv2.ie;
2+
3+
import com.sipgate.udpproxy.udp.payload.gtpv2.ie.decoder.BitHelper;
4+
5+
public class EpsBearerId extends InformationElement {
6+
public EpsBearerId(final byte type, final byte spare, final byte instance, final byte[] payload) {
7+
super(type, spare, instance, payload);
8+
}
9+
10+
public int getEpsBearerId() {
11+
return BitHelper.toInt(payload[0], 1, 4);
12+
}
13+
14+
@Override
15+
public String toString() {
16+
return "EpsBearerId{" +
17+
"epsBearerId=" + getEpsBearerId() +
18+
'}';
19+
}
20+
}

src/main/java/com/sipgate/udpproxy/udp/payload/gtpv2/ie/InformationElement.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,16 @@ private static InformationElement createByType(final byte type, final byte spare
8080
switch (type) {
8181
case 0x01:
8282
return new Imsi(type, spare, instance, payload);
83+
case 0x02:
84+
return new Cause(type, spare, instance, payload);
8385
case 0x03:
8486
return new RestartCounter(type, spare, instance, payload);
8587
case 0x47:
8688
return new AccessPointName(type, spare, instance, payload);
8789
case 0x48:
8890
return new AggregateMaximumBitRate(type, spare, instance, payload);
91+
case 0x49:
92+
return new EpsBearerId(type, spare, instance, payload);
8993
case 0x4b:
9094
return new MobileEquipmentIdentity(type, spare, instance, payload);
9195
case 0x4c:

0 commit comments

Comments
 (0)