-
Notifications
You must be signed in to change notification settings - Fork 41
Support for Multiple DNNs per Device Group with a Single UPF #439
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Signed-off-by: anaswara <[email protected]>
305fb5e
to
ee9eb2e
Compare
@@ -163,12 +164,20 @@ func (i *UPFInterfaceInfo) IP(pduSessType uint8) (net.IP, error) { | |||
} | |||
|
|||
func (upfSelectionParams *UPFSelectionParams) String() string { | |||
if upfSelectionParams == nil { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@anaswarac-dac - I am curious to know if you found any case where upfSelectionParams was null in this function call. Though this check will not have side effects but I would like to why this input parameter would be null.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@thakurajayL , We haven't encountered a case where upfSelectionParams was nil in this function call. The check was added purely as a precautionary measure to avoid potential nil dereference issues and to assist in debugging, if such a case ever arises.
@@ -223,17 +227,20 @@ func (upi *UserPlaneInformation) GenerateDefaultPath(selection *UPFSelectionPara | |||
|
|||
func (upi *UserPlaneInformation) selectMatchUPF(selection *UPFSelectionParams) []*UPNode { | |||
upList := make([]*UPNode, 0) | |||
|
|||
logger.CtxLog.Infof("Selecting matching UPFs for DNNs[%v] and S-NSSAI[sst: %d, sd: %s]", selection.DnnList, selection.SNssai.Sst, selection.SNssai.Sd) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any logging event which is not error and per call should not be at info level. Should stay at debug level
for _, dnn := range selection.DnnList { | ||
if dnnInfo.Dnn == dnn && dnnInfo.ContainsDNAI(selection.Dnai) { | ||
upList = append(upList, upNode) | ||
logger.CtxLog.Infof("Matching UPF found: %v for DNN[%s] and DNAI[%s]", upNode, dnn, selection.Dnai) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Update logging level to debug as suggested in previous comment.
@@ -160,7 +160,7 @@ func TestGenerateDefaultPath(t *testing.T) { | |||
Sst: 1, | |||
Sd: "112232", | |||
}, | |||
Dnn: "internet", | |||
DnnList: []string{"internet"}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It would be good if you could add test which coveres multiple DNN.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, we will do this.
@@ -50,7 +50,7 @@ func makeDummyConfig(sst, sd string) *protos.NetworkSliceResponse { | |||
|
|||
ns.DeviceGroup = make([]*protos.DeviceGroup, 0) | |||
ipDomain := protos.IpDomain{DnnName: "internet", UePool: "60.60.0.0/16", DnsPrimary: "8.8.8.8", Mtu: 1400} | |||
devGrp := protos.DeviceGroup{IpDomainDetails: &ipDomain} | |||
devGrp := protos.DeviceGroup{IpDomainDetails: []*protos.IpDomain{&ipDomain}} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would suggest add one more additional testcase to cover 2 DNNs.
@@ -23,6 +22,8 @@ require ( | |||
gopkg.in/yaml.v2 v2.4.0 | |||
) | |||
|
|||
require github.com/5GC-DEV/config5g-cdac v0.2.1 // indirect |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gab-arrobo - this change may not be good right? We should be using omec-project config5g. We can not be using forked version of config5g.
@@ -18,9 +18,9 @@ import ( | |||
"syscall" | |||
"time" | |||
|
|||
grpcClient "github.com/5GC-DEV/config5g-cdac/proto/client" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We will have to port this change once other big change from Canonical team merges.
@anaswarac-dac, |
π Description:
This PR introduces support for associating multiple DNNs to a single device group in the 5G Core, enabling flexible and scalable configurations in deployments with a single UPF.
β Key Highlights:
Introduced configuration support for multiple DNNs per IMSI range in the sdcore-5g-values.yml file.
Each DNN can have its own:
IP pool
MTU
DNS
UE QoS profile (including MBR uplink/downlink and traffic class)
Validated end-to-end traffic flow for both ims and internet DNNs over the same UPF.
π Configuration Changes (in sdcore-5g-values.yml):
β device-groups Section:
ip-domains list now includes multiple DNNs (ims, internet) under a single group (gnbsim-user-group1).
ip-domain-expanded changed to ip-domains
Each DNN is mapped to a different ue-ip-pool and ue-dnn-qos.
device-groups:
- name: "gnbsim-user-group1"
imsis:
- "208930100007487"
- "208930100007488"
- "208930100007489"
- "208930100007490"
- "208930100007491"
- "208930100007492"
- "208930100007493"
- "208930100007494"
- "208930100007495"
- "208930100007496"
ip-domain-name: "pool1"
ip-domains:
- dnn: ims
dns-primary: "8.8.8.8"
mtu: 1400
ue-ip-pool: "172.252.0.0/16"
ue-dnn-qos:
dnn-mbr-downlink: 2400
dnn-mbr-uplink: 1200
bitrate-unit: Kbps
traffic-class:
name: "platinum"
qci: 5
arp: 1
pdb: 100
pelr: 6
- dnn: internet
dns-primary: "10.176.0.11"
mtu: 1460
ue-ip-pool: {{ core.upf.default_upf.ue_ip_pool }}
ue-dnn-qos:
dnn-mbr-downlink: 1000
dnn-mbr-uplink: 1000
bitrate-unit: Mbps
traffic-class:
name: "platinum"
qci: 9
arp: 6
pdb: 300
pelr: 6
site-info: "enterprise"
β Userplane Section:
Defined dnn_list with individual DNNs and their respective ue_ip_pool.
cpiface:
dnn_list:
- dnn: "ims"
ue_ip_pool: "172.252.0.0/16"
- dnn: "internet"
ue_ip_pool: "172.250.0.0/16" # Must match slice DNN
hostname: "upf"
enable_ue_ip_alloc: false