diff --git a/dockers/docker-snmp/snmpd.conf.j2 b/dockers/docker-snmp/snmpd.conf.j2 index 585fb5353e..cf7f8f3851 100644 --- a/dockers/docker-snmp/snmpd.conf.j2 +++ b/dockers/docker-snmp/snmpd.conf.j2 @@ -13,12 +13,36 @@ # AGENT BEHAVIOUR # -# Listen for connections on all ip addresses, including eth0, ipv4 lo +# Listen for connections on all ip addresses, including eth0, ipv4 lo for multi-asic platform +# Listen on managment and loopback0 ips for single asic platform # +{% macro protocol(ip_addr) %} +{%- if ip_addr|ipv6 -%} +{{ 'udp6' }} +{%- else -%} +{{ 'udp' }} +{%- endif -%} +{% endmacro %} + {% if SNMP_AGENT_ADDRESS_CONFIG %} {% for (agentip, port, vrf) in SNMP_AGENT_ADDRESS_CONFIG %} -agentAddress {{ agentip }}{% if port %}:{{ port }}{% endif %}{% if vrf %}%{{ vrf }}{% endif %}{{ "" }} +agentAddress {{ protocol(agentip) }}:[{{ agentip }}]{% if port %}:{{ port }}{% endif %}{% if vrf %}%{{ vrf }}{% endif %}{{ "" }} {% endfor %} +{% elif NAMESPACE_COUNT is not defined or NAMESPACE_COUNT|int <= 1 %} +{% if MGMT_INTERFACE is defined %} +{% for if, ip in MGMT_INTERFACE %} +{% set agentip = ip.split('/')[0] %} +agentAddress {{ protocol(agentip) }}:[{{ agentip }}]:161 +{% endfor %} +{% endif %} +{% if LOOPBACK_INTERFACE is defined %} +{% for lo in LOOPBACK_INTERFACE %} +{% if lo | length == 2 %} +{% set agentip = lo[1].split('/')[0] %} +agentAddress {{ protocol(agentip) }}:[{{ agentip }}]:161 +{% endif %} +{% endfor %} +{% endif %} {% else %} agentAddress udp:161 agentAddress udp6:161 diff --git a/dockers/docker-snmp/start.sh b/dockers/docker-snmp/start.sh index 6de6f740b0..1d4c3b935a 100755 --- a/dockers/docker-snmp/start.sh +++ b/dockers/docker-snmp/start.sh @@ -16,11 +16,14 @@ mkdir -p /etc/ssw /etc/snmp # Parse snmp.yml and insert the data in Config DB /usr/bin/snmp_yml_to_configdb.py +ADD_PARAM=$(printf '%s {"NAMESPACE_COUNT":"%s"}' "-a" "$NAMESPACE_COUNT") + SONIC_CFGGEN_ARGS=" \ -d \ -y /etc/sonic/sonic_version.yml \ -t /usr/share/sonic/templates/sysDescription.j2,/etc/ssw/sysDescription \ -t /usr/share/sonic/templates/snmpd.conf.j2,/etc/snmp/snmpd.conf \ + $ADD_PARAM \ " sonic-cfggen $SONIC_CFGGEN_ARGS