From 39154c31021a50c5f68a820125e6dc968c0c0cdd Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Sun, 19 Nov 2023 14:58:09 +0800 Subject: [PATCH] add more capability-exhcnage config --- config.go | 58 +++++++++++++++++++++++++++++++---------------------- diameter.go | 21 ++++++++++--------- 2 files changed, 46 insertions(+), 33 deletions(-) diff --git a/config.go b/config.go index a4263ff..3608236 100644 --- a/config.go +++ b/config.go @@ -6,21 +6,23 @@ import ( "time" ) -type CapacityExchangeConfig struct { - VendorID *uint32 `json:"vendorID"` - ProductName *string `json:"productName,omitempty"` - OriginHost *string `json:"originHost,omitempty"` - OriginRealm *string `json:"originRealm,omitempty"` +type DiameterConfig struct { + RequestTimeout *Duration `json:"requestTimeout,omitempty"` + MaxRetransmits *uint `json:"maxRetransmits,omitempty"` + RetransmitInterval *Duration `json:"retransmitInterval,omitempty"` + EnableWatchdog *bool `json:"enableWatchdog,omitempty"` + WatchdogInterval *Duration `json:"watchdogInterval,omitempty"` + WatchdogStream *uint `json:"watchdogStream,omitempty"` + CapabilityExchange *CapabilityExchangeConfig `json:"capabilityExchange,omitempty"` } -type DiameterConfig struct { - RequestTimeout *Duration `json:"requestTimeout,omitempty"` - MaxRetransmits *uint `json:"maxRetransmits,omitempty"` - RetransmitInterval *Duration `json:"retransmitInterval,omitempty"` - EnableWatchdog *bool `json:"enableWatchdog,omitempty"` - WatchdogInterval *Duration `json:"watchdogInterval,omitempty"` - WatchdogStream *uint `json:"watchdogStream,omitempty"` - CapacityExchange *CapacityExchangeConfig `json:"capacityExchange,omitempty"` +type CapabilityExchangeConfig struct { + VendorID *uint32 `json:"vendorID"` + ProductName *string `json:"productName,omitempty"` + OriginHost *string `json:"originHost,omitempty"` + OriginRealm *string `json:"originRealm,omitempty"` + FirmwareRevision *uint32 `json:"firmwareRevision,omitempty"` + HostIPAddresses *[]string `json:"hostIPAddresses,omitempty"` } func processConfig(arg map[string]interface{}) (*DiameterConfig, error) { @@ -52,6 +54,8 @@ func setDiameterConfigDefaults(config *DiameterConfig) { var defaultProductName = "xk6-diameter" var defaultOriginHost = "origin.host" var defaultOriginRealm = "origin.realm" + var defaultFirmwareRevision uint32 = 1 + var defaultHostIPAddresses = []string{"127.0.0.1"} // Set defaults for DiameterConfig if config.RequestTimeout == nil { @@ -73,21 +77,27 @@ func setDiameterConfigDefaults(config *DiameterConfig) { config.WatchdogStream = &defaultWatchdogStream } - // Set defaults for CapacityExchangeConfig - if config.CapacityExchange == nil { - config.CapacityExchange = &CapacityExchangeConfig{} + // Set defaults for CapabilityExchangeConfig + if config.CapabilityExchange == nil { + config.CapabilityExchange = &CapabilityExchangeConfig{} + } + if config.CapabilityExchange.VendorID == nil { + config.CapabilityExchange.VendorID = &defaultVendorID + } + if config.CapabilityExchange.ProductName == nil { + config.CapabilityExchange.ProductName = &defaultProductName } - if config.CapacityExchange.VendorID == nil { - config.CapacityExchange.VendorID = &defaultVendorID + if config.CapabilityExchange.OriginHost == nil { + config.CapabilityExchange.OriginHost = &defaultOriginHost } - if config.CapacityExchange.ProductName == nil { - config.CapacityExchange.ProductName = &defaultProductName + if config.CapabilityExchange.OriginRealm == nil { + config.CapabilityExchange.OriginRealm = &defaultOriginRealm } - if config.CapacityExchange.OriginHost == nil { - config.CapacityExchange.OriginHost = &defaultOriginHost + if config.CapabilityExchange.FirmwareRevision == nil { + config.CapabilityExchange.FirmwareRevision = &defaultFirmwareRevision } - if config.CapacityExchange.OriginRealm == nil { - config.CapacityExchange.OriginRealm = &defaultOriginRealm + if config.CapabilityExchange.HostIPAddresses == nil { + config.CapabilityExchange.HostIPAddresses = &defaultHostIPAddresses } } diff --git a/diameter.go b/diameter.go index 6d120ac..e95b175 100644 --- a/diameter.go +++ b/diameter.go @@ -39,16 +39,19 @@ func (*Diameter) XClient(arg map[string]interface{}) (*DiameterClient, error) { return nil, err } + hostIPAddresses := []datatype.Address{} + for _, ip := range *config.CapabilityExchange.HostIPAddresses { + hostIPAddresses = append(hostIPAddresses, datatype.Address(net.ParseIP(ip))) + } + cfg := &sm.Settings{ - OriginHost: datatype.DiameterIdentity(*config.CapacityExchange.OriginHost), - OriginRealm: datatype.DiameterIdentity(*config.CapacityExchange.OriginRealm), - VendorID: datatype.Unsigned32(*config.CapacityExchange.VendorID), - ProductName: datatype.UTF8String(*config.CapacityExchange.ProductName), + OriginHost: datatype.DiameterIdentity(*config.CapabilityExchange.OriginHost), + OriginRealm: datatype.DiameterIdentity(*config.CapabilityExchange.OriginRealm), + VendorID: datatype.Unsigned32(*config.CapabilityExchange.VendorID), + ProductName: datatype.UTF8String(*config.CapabilityExchange.ProductName), OriginStateID: datatype.Unsigned32(time.Now().Unix()), - FirmwareRevision: 1, - HostIPAddresses: []datatype.Address{ - datatype.Address(net.ParseIP("127.0.0.1")), - }, + FirmwareRevision: datatype.Unsigned32(*config.CapabilityExchange.FirmwareRevision), + HostIPAddresses: hostIPAddresses, } mux := sm.New(cfg) @@ -64,7 +67,7 @@ func (*Diameter) XClient(arg map[string]interface{}) (*DiameterClient, error) { WatchdogInterval: *&config.WatchdogInterval.Duration, WatchdogStream: *config.WatchdogStream, AuthApplicationID: []*diam.AVP{ - diam.NewAVP(avp.AuthApplicationID, avp.Mbit, 0, datatype.Unsigned32(4)), + diam.NewAVP(avp.AuthApplicationID, avp.Mbit, 0, datatype.Unsigned32(4)), // TODO make configurable }, }