diff --git a/simapp.go b/simapp.go index 5a0b6a4..dd9aa9b 100644 --- a/simapp.go +++ b/simapp.go @@ -64,11 +64,12 @@ type Configuration struct { } type DevGroup struct { - Name string `yaml:"name,omitempty"` - SiteInfo string `yaml:"site-info,omitempty" json:"site-info,omitempty"` - Imsis []string `yaml:"imsis,omitempty" json:"imsis,omitempty"` - IpDomainName string `yaml:"ip-domain-name,omitempty" json:"ip-domain-name,omitempty"` - IpDomain *IpDomain `yaml:"ip-domain-expanded,omitempty" json:"ip-domain-expanded,omitempty"` + Name string `yaml:"name,omitempty"` + SiteInfo string `yaml:"site-info,omitempty" json:"site-info,omitempty"` + Imsis []string `yaml:"imsis,omitempty" json:"imsis,omitempty"` + Msisdns []string `yaml:"msisdns,omitempty" json:"msisdns,omitempty"` + IpDomainName string `yaml:"ip-domain-name,omitempty" json:"ip-domain-name,omitempty"` + IpDomains []IpDomain `yaml:"ip-domains,omitempty" json:"ip-domains,omitempty"` visited bool } @@ -586,6 +587,13 @@ func compareGroup(groupNew *DevGroup, groupOld *DevGroup) bool { logger.SimappLog.Infoln("number of Imsis changed") return true } + + // Compare MSISDN list length + if !reflect.DeepEqual(groupNew.Msisdns, groupOld.Msisdns) { + logger.SimappLog.Infoln("msisdns list has changed") + return true + } + var allimsiNew string for _, imsi := range groupNew.Imsis { allimsiNew = allimsiNew + imsi @@ -609,26 +617,41 @@ func compareGroup(groupNew *DevGroup, groupOld *DevGroup) bool { return true } - oldipdomain := groupOld.IpDomain - newipdomain := groupNew.IpDomain - if oldipdomain.Dnn != newipdomain.Dnn { - return true - } - if oldipdomain.Mtu != newipdomain.Mtu { - return true - } - if oldipdomain.UePool != newipdomain.UePool { - return true - } - if oldipdomain.UeDnnQos != nil && newipdomain.UeDnnQos != nil { - if oldipdomain.UeDnnQos.TrafficClass != nil && - newipdomain.UeDnnQos.TrafficClass != nil { - if (oldipdomain.UeDnnQos.TrafficClass.Name != newipdomain.UeDnnQos.TrafficClass.Name) || - (oldipdomain.UeDnnQos.TrafficClass.Qci != newipdomain.UeDnnQos.TrafficClass.Qci) || - (oldipdomain.UeDnnQos.TrafficClass.Arp != newipdomain.UeDnnQos.TrafficClass.Arp) || - (oldipdomain.UeDnnQos.TrafficClass.Pdb != newipdomain.UeDnnQos.TrafficClass.Pdb) || - (oldipdomain.UeDnnQos.TrafficClass.Pelr != newipdomain.UeDnnQos.TrafficClass.Pelr) { - return true + for i := range groupNew.IpDomains { + if i >= len(groupOld.IpDomains) { + // If groupOld doesn't have enough IpDomains + return true + } + + oldIpDomain := groupOld.IpDomains[i] + newIpDomain := groupNew.IpDomains[i] + + if oldIpDomain.Dnn != newIpDomain.Dnn { + logger.SimappLog.Infoln("DNN changed") + return true + } + + if oldIpDomain.Mtu != newIpDomain.Mtu { + logger.SimappLog.Infoln("MTU changed") + return true + } + + if oldIpDomain.UePool != newIpDomain.UePool { + logger.SimappLog.Infoln("UePool changed") + return true + } + + // Compare UeDnnQos if not nil + if oldIpDomain.UeDnnQos != nil && newIpDomain.UeDnnQos != nil { + if oldIpDomain.UeDnnQos.TrafficClass != nil && newIpDomain.UeDnnQos.TrafficClass != nil { + if oldIpDomain.UeDnnQos.TrafficClass.Name != newIpDomain.UeDnnQos.TrafficClass.Name || + oldIpDomain.UeDnnQos.TrafficClass.Qci != newIpDomain.UeDnnQos.TrafficClass.Qci || + oldIpDomain.UeDnnQos.TrafficClass.Arp != newIpDomain.UeDnnQos.TrafficClass.Arp || + oldIpDomain.UeDnnQos.TrafficClass.Pdb != newIpDomain.UeDnnQos.TrafficClass.Pdb || + oldIpDomain.UeDnnQos.TrafficClass.Pelr != newIpDomain.UeDnnQos.TrafficClass.Pelr { + logger.SimappLog.Infoln("TrafficClass or its properties changed") + return true + } } } } @@ -948,12 +971,23 @@ func dispatchGroup(configMsgChan chan configMessage, group *DevGroup, msgOp int) logger.SimappLog.Debugln("imsi", imsi) } logger.SimappLog.Infoln("IpDomainName", group.IpDomainName) - ipDomain := group.IpDomain - if group.IpDomain != nil { - logger.SimappLog.Infoln("IpDomain Dnn", ipDomain.Dnn) - logger.SimappLog.Infoln("IpDomain Dns Primary", ipDomain.DnsPrimary) - logger.SimappLog.Infoln("IpDomain Mtu", ipDomain.Mtu) - logger.SimappLog.Infoln("IpDomain UePool", ipDomain.UePool) + // Check if IpDomains is nil or not + if group.IpDomains != nil { + for _, ipDomain := range group.IpDomains { + logger.SimappLog.Infoln(" IpDomain Dnn:", ipDomain.Dnn) + logger.SimappLog.Infoln(" IpDomain Dns Primary:", ipDomain.DnsPrimary) + logger.SimappLog.Infoln(" IpDomain Mtu:", ipDomain.Mtu) + logger.SimappLog.Infoln(" IpDomain UePool:", ipDomain.UePool) + + // Check for UeDnnQos field if it's populated + if ipDomain.UeDnnQos != nil { + logger.SimappLog.Infoln(" UeDnnQos:", ipDomain.UeDnnQos) + } else { + logger.SimappLog.Warnln(" UeDnnQos is nil") + } + } + } else { + logger.SimappLog.Warnln(" IpDomains is nil") } b, err := json.Marshal(group) if err != nil {