From 33f57733e96a044b1b41153e241d9f3dc46066d1 Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Thu, 9 Apr 2015 17:41:41 +0200 Subject: [PATCH] MT#12303 dialogic configure snmp and nfs simplifies also the way, configs are taken from the peer preferences Change-Id: I54f6a110227251fcf19ceaac33baec1adf5921f9 --- lib/NGCP/Panel/Controller/Peering.pm | 100 +++------ lib/NGCP/Panel/Utils/DialogicImg.pm | 314 +++++++++++++-------------- share/tools/dialogic-test-client.pl | 39 ++-- 3 files changed, 207 insertions(+), 246 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index a4dca92566..2b8368a261 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -385,88 +385,50 @@ sub servers_delete :Chained('servers_base') :PathPart('delete') :Args(0) { sub servers_flash_dialogic :Chained('servers_base') :PathPart('edit/dialogic') :Args(0) { my ($self, $c) = @_; - my $pref_mode = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( - c => $c, - attribute => 'dialogic_mode', - peer_host => $c->stash->{server_result}, - )->first; - my $pref_ip_rtp = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( - c => $c, - attribute => 'dialogic_ip_rtp', - peer_host => $c->stash->{server_result}, - )->first; - my $pref_ip_config = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( - c => $c, - attribute => 'dialogic_ip_config', - peer_host => $c->stash->{server_result}, - )->first; - my $pref_out_codecs = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( - c => $c, - attribute => 'dialogic_out_codecs', - peer_host => $c->stash->{server_result}, - )->first; - my $pref_ss7_opc = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( - c => $c, - attribute => 'dialogic_ss7_opc', - peer_host => $c->stash->{server_result}, - )->first; - my $pref_ss7_apc = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( - c => $c, - attribute => 'dialogic_ss7_apc', - peer_host => $c->stash->{server_result}, - )->first; - my $pref_ss7_dpc = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( - c => $c, - attribute => 'dialogic_ss7_dpc', - peer_host => $c->stash->{server_result}, - )->first; + my $config = { + ip_sip => $c->stash->{server_result}->ip, + ip_client => $c->config->{dialogic}{own_ip}, + }; + my $dialogic_group = $c->model('DB')->resultset('voip_preference_groups')->find({ + name => 'Dialogic Settings', + }); + for my $tmp_pref ($dialogic_group->voip_preferences->all) { + my $pref_name = $tmp_pref->attribute; + my $cfg_name = $pref_name =~ s/^dialogic_//r; + my $peer_pref = NGCP::Panel::Utils::Preferences::get_peer_preference_rs( + c => $c, + attribute => $pref_name, + peer_host => $c->stash->{server_result}, + )->first; + next unless $peer_pref; + $config->{$cfg_name} = $peer_pref->value; + } + + if (exists $config->{out_codecs}) { + my @new_out_codecs = map { s/^\s+|\s+$//gr } split(m/,/, $config->{out_codecs}); + $config->{out_codecs} = \@new_out_codecs; + } try { - if ($pref_mode->value ne 'none') { + if ($config->{mode} ne 'none') { my $api = NGCP::Panel::Utils::DialogicImg->new( - server => 'https://' . $pref_ip_config->value, + server => 'https://' . $config->{ip_config}, ); - my @configured_out_codecs = map { s/^\s+|\s+$//gr } split(m/,/, $pref_out_codecs->value); + $api->login( $c->config->{dialogic}{username}, $c->config->{dialogic}{password} ); my $resp = $api->obtain_lock(); die "Couldn't connect to dialogic" - unless $resp->code == 200; - if ($pref_mode->value eq 'sipsip') { - my $config = { - ip_sip => $c->stash->{server_result}->ip, - ip_rtp => $pref_ip_rtp->value, - ip_client => $c->config->{dialogic}{own_ip}, - out_codecs => \@configured_out_codecs, - ip_config => $pref_ip_config->value, # just for the config hash - dialogic_mode => $pref_mode->value, - }; + unless ($resp->code == 200); + if ($config->{mode} eq 'sipsip') { $resp = $api->create_all_sipsip($config, 1); - } elsif ($pref_mode->value eq 'sipisdn') { - my $config = { - ip_sip => $c->stash->{server_result}->ip, - ip_rtp => $pref_ip_rtp->value, - ip_client => $c->config->{dialogic}{own_ip}, - out_codecs => \@configured_out_codecs, - ip_config => $pref_ip_config->value, # just for the config hash - dialogic_mode => $pref_mode->value, - }; + } elsif ($config->{mode} eq 'sipisdn') { $resp = $api->create_all_sipisdn($config, 1); - } elsif ($pref_mode->value eq 'sipss7') { - my $config = { - ip_sip => $c->stash->{server_result}->ip, - ip_rtp => $pref_ip_rtp->value, - ip_client => $c->config->{dialogic}{own_ip}, - out_codecs => \@configured_out_codecs, - ss7_opc => $pref_ss7_opc ? $pref_ss7_opc->value : '1-1-1', - ss7_apc => $pref_ss7_apc ? $pref_ss7_apc->value : '2-2-2', - ss7_dpc => $pref_ss7_dpc ? $pref_ss7_dpc->value : '2-2-2', - ip_config => $pref_ip_config->value, # just for the config hash - dialogic_mode => $pref_mode->value, - }; + } elsif ($config->{mode} eq 'sipss7') { $resp = $api->create_all_sipss7($config, 1); + } } NGCP::Panel::Utils::Message->info( diff --git a/lib/NGCP/Panel/Utils/DialogicImg.pm b/lib/NGCP/Panel/Utils/DialogicImg.pm index 9d751b1b4d..870827af8a 100644 --- a/lib/NGCP/Panel/Utils/DialogicImg.pm +++ b/lib/NGCP/Panel/Utils/DialogicImg.pm @@ -161,6 +161,16 @@ has 'classinfo' => ( is => 'ro', isa => HashRef, default => sub{ parent => 'sip', revalidate => 0, }, + call_tracing => { + name => 'CallTracing', + parent => 'bn2020', + revalidate => 0, + }, + snmp_agent => { + name => 'SNMPClient', + parent => 'bn2020', + revalidate => 0, + }, ss7 => { name => 'SS7', parent => 'root', @@ -286,6 +296,26 @@ has 'classinfo' => ( is => 'ro', isa => HashRef, default => sub{ parent => 'external_gateway_collection', revalidate => 1, }, + external_nfsserver_collection => { + name => 'NFSServers', + parent => 'external_network_elements', + revalidate => 0, + }, + external_nfsserver => { + name => 'NFSServer', + parent => 'external_nfsserver_collection', + revalidate => 1, + }, + external_snmpmanager_collection => { + name => 'SNMPServers', + parent => 'external_network_elements', + revalidate => 0, + }, + external_snmpmanager => { + name => 'SNMPServer', + parent => 'external_snmpmanager_collection', + revalidate => 1, + }, routing_configuration => { name => 'RoutingConfiguration', parent => 'root', @@ -508,6 +538,18 @@ sub create_sip_ip { return $self->_create_generic($options, 'sip_ip'); } +sub create_call_tracing { + my ( $self, $options ) = @_; + + return $self->_create_generic($options, 'call_tracing'); +} + +sub create_snmp_agent { + my ( $self, $options ) = @_; + + return $self->_create_generic($options, 'snmp_agent'); +} + sub create_ss7 { my ( $self, $options ) = @_; @@ -658,6 +700,30 @@ sub create_external_gateway { return $self->_create_generic($options, 'external_gateway'); } +sub create_external_nfsserver_collection { + my ( $self, $options ) = @_; + + return $self->_create_generic($options, 'external_nfsserver_collection'); +} + +sub create_external_nfsserver { + my ( $self, $options ) = @_; + + return $self->_create_generic($options, 'external_nfsserver'); +} + +sub create_external_snmpmanager_collection { + my ( $self, $options ) = @_; + + return $self->_create_generic($options, 'external_snmpmanager_collection'); +} + +sub create_external_snmpmanager { + my ( $self, $options ) = @_; + + return $self->_create_generic($options, 'external_snmpmanager'); +} + sub create_routing_configuration { my ($self) = @_; @@ -752,9 +818,14 @@ sub _create_generic { return $resp; } + # log: 0: none, 1: short, 2: everything -# necessary keys: ip_sip, ip_rtp, ip_client, out_codecs, optional: in_codecs -sub create_all_sipsip { +# necessary keys: ip_sip, ip_rtp, ip_client, out_codecs +# optional: in_codecs +# for nfs: ip_nfs_server, nfs_path +# for snmp: snmp_system_name, snmp_system_location, snmp_system_contact, snmp_community_name +# for snmp optional: ip_snmp_manager, snmp_version +sub create_general_part { my ($self, $settings, $log) = @_; $self->_create_indent; @@ -779,6 +850,41 @@ sub create_all_sipsip { { PayloadType => $_ }, }; } @{ $settings->{out_codecs} }; + my @nfs_schedule; + if (defined $settings->{ip_nfs_server} && + defined $settings->{nfs_path}) { + @nfs_schedule = ( + {name => 'external_nfsserver_collection', options => undef}, # needs external_network_elements + {name => 'external_nfsserver', options => { + Name => 'ngcp_nfs_server', + IPAddress => $settings->{ip_nfs_server}, + }}, + {name => 'call_tracing', options => { + TraceTime => '600', + MountDirectory => $settings->{nfs_path}, + }}, + ); + } + my @snmp_schedule; + if (defined $settings->{snmp_system_name} && + defined $settings->{snmp_system_location} && + defined $settings->{snmp_system_contact} && + defined $settings->{snmp_community_name}) { + @snmp_schedule = ( + {name => 'external_snmpmanager_collection', options => undef}, + {name => 'external_snmpmanager', options => { + UserName => 'ngcp', + CommunityName => $settings->{snmp_community_name}, + ServerIPAddress => $settings->{ip_snmp_manager} // $settings->{ip_client}, + defined $settings->{snmp_version} ? (ServerVersion => $settings->{snmp_version} ) : (), + }}, + {name => 'snmp_agent', options => { + SystemName => $settings->{snmp_system_name}, + SystemLoc => $settings->{snmp_system_location}, + SystemContact => $settings->{snmp_system_contact}, + }}, + ); + } my $schedule = [ {name => 'network', options => undef}, {name => 'interface_collection', options => undef}, @@ -824,6 +930,24 @@ sub create_all_sipsip { IPAddress => $settings->{ip_client}, IPAddress4 => $settings->{ip_client}, }}, + @nfs_schedule, + @snmp_schedule, + ]; + + $self->_run_schedule($schedule, $log); + + return 0; +} + +# log: 0: none, 1: short, 2: everything +# necessary keys: ip_sip, ip_rtp, ip_client, out_codecs, optional: in_codecs +sub create_all_sipsip { + my ($self, $settings, $log) = @_; + + $self->create_general_part($settings, $log); + my $resp; + + my $schedule = [ {name => 'routing_configuration', options => undef}, {name => 'channel_group_collection', options => undef}, {name => 'route_table_collection', options => undef}, @@ -850,19 +974,7 @@ sub create_all_sipsip { #{run => 'download_channel_groups'}, ]; - for my $elem (@{ $schedule }) { - my ($name, $options) = @{ $elem }{('name', 'options')}; - my $fun = "create_$name"; - $resp = $self->$fun($options); - # $resp = $self->_create_generic($options, $name); - if ($log >= 1) { - my $ind = " " x ($self->classinfo->{$name}{indent}*4); - printf "%-37s: %d\n", "$ind$name", $resp->code; - if ($resp->code != 200) { - #use DDP; p $resp->data; - } - } - } + $self->_run_schedule($schedule, $log); $self->download_profiles; $self->download_route_table; @@ -876,67 +988,13 @@ sub create_all_sipsip { sub create_all_sipisdn { my ($self, $settings, $log) = @_; - $self->_create_indent; + $self->create_general_part($settings, $log); - my $in_codecs = ['G711 ulaw', 'G711 alaw', 'G729', 'AMR', - 'AMR Bandwidth Efficient', 'AMR-WB', 'AMR-WB Bandwidth Efficient', - 'Clear Channel', 'G723 5.3 Kbps', 'G723 6.3 Kbps', 'G722', 'iLBC 30ms', - 'GSM-FR Static Payload Type', 'GSM-FR Dynamic Payload Type', - 'G726-32/G721 Static Payload Type', 'G726-32/G721 Dynamic Payload Type', - 'GSM-EFR']; + my $resp; - my $resp = $self->create_bn2020; - my @in_schedule = map { - { - name => 'vocoder_profile', options => - { PayloadType => $_ }, - }; - } @{ $settings->{in_codecs} // $in_codecs }; - my @out_schedule = map { - { - name => 'vocoder_profile', options => - { PayloadType => $_ }, - }; - } @{ $settings->{out_codecs} }; my $schedule = [ - {name => 'network', options => undef}, - {name => 'interface_collection', options => undef}, - {name => 'interface', options => undef}, - {name => 'ip_address', options => { - NIIPAddress => $settings->{ip_sip}, - NIIPPhy => 'Services', - }}, - {name => 'interface', options => undef}, - {name => 'ip_address', options => { - NIIPAddress => $settings->{ip_rtp}, - NIIPPhy => 'Media 0', - }}, - {name => 'facility', options => undef}, - {name => 'packet_facility_collection', options => undef}, - {name => 'packet_facility', options => { - ChannelCount => 50, - }}, - {name => 'signaling', options => undef}, - {name => 'sip', options => undef}, - {name => 'sip_ip', options => { - IPAddress => $settings->{ip_sip}, - }}, {name => 'isdn', options => undef}, - {name => 'profile_collection', options => undef}, - {name => 'ip_profile_collection', options => undef}, - {name => 'ip_profile', options => { - DigitRelay => 'DTMF Packetized', - Name => 'ngcp_in_profile', - }}, - @in_schedule, - {name => 'ip_profile', options => { - DigitRelay => 'DTMF Packetized', - Name => 'ngcp_out_profile', - }}, - @out_schedule, - {name => 'sip_profile_collection', options => undef}, - {name => 'sip_profile', options => undef}, {name => 'tdm_profile_collection', options => undef}, {name => 'e1_profile', options => undef}, {name => 'ds1_spans', options => { @@ -956,13 +1014,6 @@ sub create_all_sipisdn { EndChannel => 'Span ID: 1 CID: 30', }}, #{run => 'download_profiles'}, - {name => 'external_network_elements', options => undef}, - {name => 'external_gateway_collection', options => undef}, - {name => 'external_gateway', options => { - Name => 'Phone1', - IPAddress => $settings->{ip_client}, - IPAddress4 => $settings->{ip_client}, - }}, {name => 'routing_configuration', options => undef}, {name => 'channel_group_collection', options => undef}, {name => 'route_table_collection', options => undef}, @@ -1010,19 +1061,7 @@ sub create_all_sipisdn { #{run => 'download_channel_groups'}, ]; - for my $elem (@{ $schedule }) { - my ($name, $options) = @{ $elem }{('name', 'options')}; - my $fun = "create_$name"; - $resp = $self->$fun($options); - # $resp = $self->_create_generic($options, $name); - if ($log >= 1) { - my $ind = " " x ($self->classinfo->{$name}{indent}*4); - printf "%-37s: %d\n", "$ind$name", $resp->code; - if ($resp->code != 200) { - use DDP; p $resp->data; - } - } - } + $self->_run_schedule($schedule, $log); $self->download_profiles; $self->download_route_table; @@ -1037,66 +1076,11 @@ sub create_all_sipisdn { sub create_all_sipss7 { my ($self, $settings, $log) = @_; - $self->_create_indent; + $self->create_general_part($settings, $log); - my $in_codecs = ['G711 ulaw', 'G711 alaw', 'G729', 'AMR', - 'AMR Bandwidth Efficient', 'AMR-WB', 'AMR-WB Bandwidth Efficient', - 'Clear Channel', 'G723 5.3 Kbps', 'G723 6.3 Kbps', 'G722', 'iLBC 30ms', - 'GSM-FR Static Payload Type', 'GSM-FR Dynamic Payload Type', - 'G726-32/G721 Static Payload Type', 'G726-32/G721 Dynamic Payload Type', - 'GSM-EFR']; + my $resp; - my $resp = $self->create_bn2020; - my @in_schedule = map { - { - name => 'vocoder_profile', options => - { PayloadType => $_ }, - }; - } @{ $settings->{in_codecs} // $in_codecs }; - my @out_schedule = map { - { - name => 'vocoder_profile', options => - { PayloadType => $_ }, - }; - } @{ $settings->{out_codecs} }; my $schedule = [ - {name => 'network', options => undef}, - {name => 'interface_collection', options => undef}, - {name => 'interface', options => undef}, - {name => 'ip_address', options => { - NIIPAddress => $settings->{ip_sip}, - NIIPPhy => 'Services', - }}, - {name => 'interface', options => undef}, - {name => 'ip_address', options => { - NIIPAddress => $settings->{ip_rtp}, - NIIPPhy => 'Media 0', - }}, - {name => 'facility', options => undef}, - {name => 'packet_facility_collection', options => undef}, - {name => 'packet_facility', options => { - ChannelCount => 50, - }}, - {name => 'signaling', options => undef}, - {name => 'sip', options => undef}, - {name => 'sip_ip', options => { - IPAddress => $settings->{ip_sip}, - }}, - - {name => 'profile_collection', options => undef}, - {name => 'ip_profile_collection', options => undef}, - {name => 'ip_profile', options => { - DigitRelay => 'DTMF Packetized', - Name => 'ngcp_in_profile', - }}, - @in_schedule, - {name => 'ip_profile', options => { - DigitRelay => 'DTMF Packetized', - Name => 'ngcp_out_profile', - }}, - @out_schedule, - {name => 'sip_profile_collection', options => undef}, - {name => 'sip_profile', options => undef}, {name => 'tdm_profile_collection', options => undef}, {name => 'e1_profile', options => undef}, {name => 'ds1_spans', options => { @@ -1145,13 +1129,6 @@ sub create_all_sipss7 { StartCIC => '1', }}, - {name => 'external_network_elements', options => undef}, - {name => 'external_gateway_collection', options => undef}, - {name => 'external_gateway', options => { - Name => 'Phone1', - IPAddress => $settings->{ip_client}, - IPAddress4 => $settings->{ip_client}, - }}, {name => 'routing_configuration', options => undef}, {name => 'channel_group_collection', options => undef}, {name => 'route_table_collection', options => undef}, @@ -1201,7 +1178,28 @@ sub create_all_sipss7 { #{run => 'download_channel_groups'}, ]; + $self->_run_schedule($schedule, $log); + + $self->download_profiles; + $self->download_route_table; + $self->download_channel_groups; + + return 0; +} + +###### OTHER STUFF ###### + +sub _run_schedule { + my ($self, $schedule, $log) = @_; + + my $resp; + for my $elem (@{ $schedule }) { + if (exists $elem->{run}) { + my $command = $elem->{run}; + $self->$command; + next; + } my ($name, $options) = @{ $elem }{('name', 'options')}; my $fun = "create_$name"; $resp = $self->$fun($options); @@ -1215,15 +1213,9 @@ sub create_all_sipss7 { } } - $self->download_profiles; - $self->download_route_table; - $self->download_channel_groups; - return 0; } -###### OTHER STUFF ###### - sub hash_config { my ($self, $config) = @_; $Storable::canonical = 1; diff --git a/share/tools/dialogic-test-client.pl b/share/tools/dialogic-test-client.pl index 73dc4607d5..47662e2295 100644 --- a/share/tools/dialogic-test-client.pl +++ b/share/tools/dialogic-test-client.pl @@ -10,7 +10,7 @@ exit if try_parse_file(@ARGV); my $resp; my $test = NGCP::Panel::Utils::DialogicImg->new( - server => 'https://10.15.20.150', + server => 'https://10.15.20.133', ); p $test->login( 'dialogic', 'Dial0gic' ); @@ -20,6 +20,28 @@ p $resp->code; print "LOGGED IN, LOCK OBTAINED ############################\n"; +my $result = $test->create_all_sipss7({ + ip_sip => '10.15.20.92', + ip_rtp => '10.15.21.10', + ip_client => '10.15.20.144', + in_codecs => ['G711 ulaw', 'G711 alaw', 'G729', 'AMR'], + out_codecs => ['G711 ulaw', 'G711 alaw', 'G729', 'AMR'], + ss7_opc => '1-1-1', + ss7_apc => '2-2-2', # adjacent point code + ss7_dpc => '2-2-2', + ip_nfs_server => '192.168.51.45', + nfs_path => '//export/users/dialogic2', + snmp_system_name => 'Dialogic2', + snmp_system_location => 'foobar', + snmp_system_contact => 'foobar', + snmp_community_name => 'bar', + }, + 2, + ); + +exit; + + # $resp = $test->delete_all_bn2020; # $resp = $test->delete_all_bn2020; # p $resp->code; @@ -48,21 +70,6 @@ print "LOGGED IN, LOCK OBTAINED ############################\n"; # p $resp->data; # exit; -my $result = $test->create_all_sipss7({ - ip_sip => '10.15.20.92', - ip_rtp => '10.15.21.10', - ip_client => '10.15.20.146', - in_codecs => ['G711 ulaw', 'G711 alaw', 'G729', 'AMR'], - out_codecs => ['G711 ulaw', 'G711 alaw', 'G729', 'AMR'], - ss7_opc => '1-1-1', - ss7_apc => '2-2-2', # adjacent point code - ss7_dpc => '2-2-2', - }, - 2, - ); - -exit; - sub print_documentation_md { my ($api) = @_;