[HR] Added LBO Roaming Allowed in WebUI (#2194)

According to TS29.503, we can choose whether or not to allow LBO roaming
on a per-session basis.

To this end, we have made changes to allow us to set this via the WebUI.
This commit is contained in:
Sukchan Lee 2024-08-05 16:47:47 +09:00
parent 37430970f7
commit d7126f98ac
10 changed files with 106 additions and 5 deletions

View file

@ -74,9 +74,22 @@ const Profile = new Schema({
uplink: { value: Number, unit: Number }
},
},
}]
}],
lbo_roaming_allowed: Boolean
}]
}]
}],
subscriber_status: {
$type: Number,
default: 0 // Service Granted
},
operator_determined_barring: {
$type: Number,
default: 0 // No barring
}
}, { typeKey: '$type' });
module.exports = mongoose.model('Profile', Profile);

View file

@ -79,7 +79,10 @@ const Subscriber = new Schema({
uplink: { value: Number, unit: Number }
},
},
}]
}],
lbo_roaming_allowed: Boolean
}]
}],

View file

@ -114,6 +114,30 @@ const schema = {
}
}
},
"subscriber_status": {
"type": "number",
"title": "Subscriber Status (TS 29.272 7.3.29)",
"enum": [ 0, 1 ],
"enumNames": ["SERVICE_GRANTED", "OPERATOR_DETERMINED_BARRING"],
"default": 0,
},
"operator_determined_barring": {
"type": "number",
"title": "Operator Determined Barring (TS 29.272 7.3.30)",
"enum": [ 0, 1, 2, 3, 4, 5, 6, 7, 8 ],
"enumNames": [
"(0) All Packet Oriented Services Barred",
"(1) Roamer Access HPLMN-AP Barred",
"(2) Roamer Access to VPLMN-AP Barred",
"(3) Barring of all outgoing calls",
"(4) Barring of all outgoing international calls",
"(5) Barring of all outgoing international calls except those directed to the home PLMN country",
"(6) Barring of all outgoing inter-zonal calls",
"(7) Barring of all outgoing inter-zonal calls except those directed to the home PLMN country",
"(8) Barring of all outgoing international calls except those directed to the home PLMN country and Barring of all outgoing inter-zonal calls"
],
"default": 0,
},
"slice": {
"type": "array",
"title": "Slice Configurations",
@ -170,6 +194,10 @@ const schema = {
"enumNames": ["IPv4", "IPv6", "IPv4v6"],
"default": 3,
},
"lbo_roaming_allowed": {
"type": "boolean",
"title": "LBO Roaming Allowed",
},
"qos": {
"type": "object",
"title": "",
@ -520,6 +548,9 @@ const uiSchema = {
"type": {
classNames: "col-xs-4",
},
"lbo_roaming_allowed": {
classNames: "col-xs-12",
},
"qos": {
classNames: "col-xs-12",
"index": {

View file

@ -172,6 +172,8 @@ const View = ({ visible, disableOnClickOutside, profile, onEdit, onDelete, onHid
const imeisv = (profile || {}).imeisv;
const security = ((profile || {}).security || {});
const ambr = ((profile || {}).ambr || {});
const subscriber_status = (profile || {}).subscriber_status;
const operator_determined_barring = (profile || {}).operator_determined_barring;
const slice_list = ((profile || {}).slice || []);
return (
@ -257,6 +259,23 @@ const View = ({ visible, disableOnClickOutside, profile, onEdit, onDelete, onHid
</div>
</div>
</div>
<div className="sectioncolumn">
<div className="body">
<div className="left">
<SecurityIcon/>
</div>
<div className="right">
<div className="data">
{subscriber_status == 0 ? ( "SERVICE_GRANTED (0)" ) : ( "OPERATOR_DETERMINED_BARRING (1)" )}
<span style={{color:oc.gray[5]}}><KeyboardControlIcon/>Subscriber Status (TS 29.272 7.3.29)</span>
</div>
<div className="data">
{operator_determined_barring}
<span style={{color:oc.gray[5]}}><KeyboardControlIcon/>Operator Determined Barring (TS 29.272 7.3.30)</span>
</div>
</div>
</div>
</div>
<div className="sectioncolumn">
<div className="body">
<div className="left">
@ -314,6 +333,7 @@ const View = ({ visible, disableOnClickOutside, profile, onEdit, onDelete, onHid
<div className="body" style={{color:oc.gray[5]}}>
<div className="large_data">DNN/APN</div>
<div className="medium_data">Type</div>
<div className="medium_data">LBO</div>
<div className="small_data">5QI/QCI</div>
<div className="small_data">ARP</div>
<div className="medium_data">Capability</div>
@ -332,6 +352,10 @@ const View = ({ visible, disableOnClickOutside, profile, onEdit, onDelete, onHid
session.type === 3 ? "IPv4v6" :
"Unknown"
}</div>
<div className="medium_data">{
session.lbo_roaming_allowed == true ? "Allowed" :
"Not allowed"
}</div>
<div className="small_data">{session.qos.index}</div>
<div className="small_data">{session.qos.arp.priority_level}</div>
<div className="medium_data">
@ -411,6 +435,7 @@ const View = ({ visible, disableOnClickOutside, profile, onEdit, onDelete, onHid
<div className="body">
<div className="large_data"></div>
<div className="medium_data"></div>
<div className="medium_data"></div>
<div className="small_data">{pcc_rule.qos.index}</div>
<div className="small_data">{pcc_rule.qos.arp.priority_level}</div>
<div className="medium_data">

View file

@ -200,6 +200,10 @@ const schema = {
"enumNames": ["IPv4", "IPv6", "IPv4v6"],
"default": 3,
},
"lbo_roaming_allowed": {
"type": "boolean",
"title": "LBO Roaming Allowed",
},
"qos": {
"type": "object",
"title": "",
@ -556,6 +560,9 @@ const uiSchema = {
"type": {
classNames: "col-xs-4",
},
"lbo_roaming_allowed": {
classNames: "col-xs-12",
},
"qos": {
classNames: "col-xs-12",
"index": {

View file

@ -359,6 +359,7 @@ const View = ({ visible, disableOnClickOutside, subscriber, onEdit, onDelete, on
<div className="body" style={{color:oc.gray[5]}}>
<div className="large_data">DNN/APN</div>
<div className="medium_data">Type</div>
<div className="medium_data">LBO</div>
<div className="small_data">5QI/QCI</div>
<div className="small_data">ARP</div>
<div className="medium_data">Capability</div>
@ -377,6 +378,10 @@ const View = ({ visible, disableOnClickOutside, subscriber, onEdit, onDelete, on
session.type === 3 ? "IPv4v6" :
"Unknown"
}</div>
<div className="medium_data">{
session.lbo_roaming_allowed == true ? "Allowed" :
"Not allowed"
}</div>
<div className="small_data">{session.qos.index}</div>
<div className="small_data">{session.qos.arp.priority_level}</div>
<div className="medium_data">
@ -456,6 +461,7 @@ const View = ({ visible, disableOnClickOutside, subscriber, onEdit, onDelete, on
<div className="body">
<div className="large_data"></div>
<div className="medium_data"></div>
<div className="medium_data"></div>
<div className="small_data">{pcc_rule.qos.index}</div>
<div className="small_data">{pcc_rule.qos.arp.priority_level}</div>
<div className="medium_data">