diff --git a/agents/diam_it_test.go b/agents/diam_it_test.go index 05f89f6d6..846eb4c04 100644 --- a/agents/diam_it_test.go +++ b/agents/diam_it_test.go @@ -82,9 +82,9 @@ func TestDiamItStartEngine(t *testing.T) { func TestDiamItConnectDiameterClient(t *testing.T) { diamClnt, err = NewDiameterClient(daCfg.DiameterAgentCfg().Listen, "INTEGRATION_TESTS", - daCfg.DiameterAgentCfg().OriginRealm, - daCfg.DiameterAgentCfg().VendorId, daCfg.DiameterAgentCfg().ProductName, - utils.DIAMETER_FIRMWARE_REVISION, daCfg.DiameterAgentCfg().DictionariesPath) + daCfg.DiameterAgentCfg().OriginRealm, daCfg.DiameterAgentCfg().VendorId, + daCfg.DiameterAgentCfg().ProductName, utils.DIAMETER_FIRMWARE_REVISION, + daCfg.DiameterAgentCfg().DictionariesPath, daCfg.DiameterAgentCfg().Network) if err != nil { t.Fatal(err) } diff --git a/agents/diamagent.go b/agents/diamagent.go index 9e32bd9af..6d2710ff1 100644 --- a/agents/diamagent.go +++ b/agents/diamagent.go @@ -70,7 +70,7 @@ type DiameterAgent struct { // ListenAndServe is called when DiameterAgent is started, usually from within cmd/cgr-engine func (da *DiameterAgent) ListenAndServe() error { - return diam.ListenAndServe(da.cgrCfg.DiameterAgentCfg().Listen, da.handlers(), nil) + return diam.ListenAndServeNetwork(da.cgrCfg.DiameterAgentCfg().Network, da.cgrCfg.DiameterAgentCfg().Listen, da.handlers(), nil) } // Creates the message handlers @@ -86,7 +86,7 @@ func (da *DiameterAgent) handlers() diam.Handler { dSM.HandleFunc("ALL", da.handleMessage) // route all commands to one dispatcher go func() { for err := range dSM.ErrorReports() { - utils.Logger.Err(fmt.Sprintf("<%s> sm error: %v", utils.DiameterAgent, err)) + utils.Logger.Err(fmt.Sprintf("<%s> sm error: %+v", utils.DiameterAgent, err)) } }() return dSM diff --git a/agents/diamclient.go b/agents/diamclient.go index 528ca3487..b3686ccf6 100644 --- a/agents/diamclient.go +++ b/agents/diamclient.go @@ -29,13 +29,15 @@ import ( "github.com/fiorix/go-diameter/diam/sm" ) -func NewDiameterClient(addr, originHost, originRealm string, vendorId int, productName string, firmwareRev int, dictsDir string) (*DiameterClient, error) { +func NewDiameterClient(addr, originHost, originRealm string, vendorId int, productName string, + firmwareRev int, dictsDir string, network string) (*DiameterClient, error) { cfg := &sm.Settings{ OriginHost: datatype.DiameterIdentity(originHost), OriginRealm: datatype.DiameterIdentity(originRealm), VendorID: datatype.Unsigned32(vendorId), ProductName: datatype.UTF8String(productName), FirmwareRevision: datatype.Unsigned32(firmwareRev), + HostIPAddresses: []datatype.Address{datatype.Address(addr)}, } dSM := sm.New(cfg) go func() { @@ -59,7 +61,7 @@ func NewDiameterClient(addr, originHost, originRealm string, vendorId int, produ return nil, err } } - conn, err := cli.Dial(addr) + conn, err := cli.DialNetwork(network, addr) if err != nil { return nil, err } diff --git a/config/config_defaults.go b/config/config_defaults.go index dd015dccd..90401a3c8 100755 --- a/config/config_defaults.go +++ b/config/config_defaults.go @@ -372,6 +372,7 @@ const CGRATES_CFG_JSON = ` "diameter_agent": { "enabled": false, // enables the diameter agent: "listen": "127.0.0.1:3868", // address where to listen for diameter requests + "network": "tcp", // network type for diameter "dictionaries_path": "/usr/share/cgrates/diameter/dict/", // path towards directory holding additional dictionaries to load "sessions_conns": [ {"address": "*internal"} // connection towards SessionService diff --git a/config/config_json_test.go b/config/config_json_test.go index b170347fd..d4e1235d7 100755 --- a/config/config_json_test.go +++ b/config/config_json_test.go @@ -593,6 +593,7 @@ func TestDiameterAgentJsonCfg(t *testing.T) { eCfg := &DiameterAgentJsonCfg{ Enabled: utils.BoolPointer(false), Listen: utils.StringPointer("127.0.0.1:3868"), + Network: utils.StringPointer("tcp"), Dictionaries_path: utils.StringPointer("/usr/share/cgrates/diameter/dict/"), Sessions_conns: &[]*HaPoolJsonCfg{ { diff --git a/config/config_test.go b/config/config_test.go index 96f018b18..a6c78a75b 100755 --- a/config/config_test.go +++ b/config/config_test.go @@ -925,6 +925,7 @@ func TestCgrCfgJSONDefaultsDiameterAgentCfg(t *testing.T) { testDA := &DiameterAgentCfg{ Enabled: false, Listen: "127.0.0.1:3868", + Network: "tcp", DictionariesPath: "/usr/share/cgrates/diameter/dict/", SessionSConns: []*HaPoolConfig{ {Address: "*internal"}}, diff --git a/config/diametercfg.go b/config/diametercfg.go index 011ff7639..dbd55dedc 100644 --- a/config/diametercfg.go +++ b/config/diametercfg.go @@ -24,6 +24,7 @@ import ( type DiameterAgentCfg struct { Enabled bool // enables the diameter agent: + Network string // network for diameter Listen string // address where to listen for diameter requests DictionariesPath string SessionSConns []*HaPoolConfig // connections towards SMG component @@ -45,6 +46,9 @@ func (da *DiameterAgentCfg) loadFromJsonCfg(jsnCfg *DiameterAgentJsonCfg) (err e if jsnCfg.Listen != nil { da.Listen = *jsnCfg.Listen } + if jsnCfg.Network != nil { + da.Network = *jsnCfg.Network + } if jsnCfg.Dictionaries_path != nil { da.DictionariesPath = *jsnCfg.Dictionaries_path } diff --git a/config/libconfig_json.go b/config/libconfig_json.go index 558941df9..275d62a14 100755 --- a/config/libconfig_json.go +++ b/config/libconfig_json.go @@ -336,6 +336,7 @@ type OsipsConnJsonCfg struct { type DiameterAgentJsonCfg struct { Enabled *bool // enables the diameter agent: Listen *string // address where to listen for diameter requests + Network *string // network for diameter Dictionaries_path *string // path towards additional dictionaries Sessions_conns *[]*HaPoolJsonCfg // Connections towards SessionS Origin_host *string