Index: /branches/rel_apv_10_7_4/usr/src/sys/click/netinet/click_udp.c
===================================================================
--- /branches/rel_apv_10_7_4/usr/src/sys/click/netinet/click_udp.c	(revision 40235)
+++ /branches/rel_apv_10_7_4/usr/src/sys/click/netinet/click_udp.c	(working copy)
@@ -1060,7 +1060,7 @@
 	}
 
         // TWSD-1620 SNMP Rate Limiting Logic
-        if (ntohs(udp->uh_dport) == 161) {
+        if (ntohs(udp->uh_dport) == 161 || ntohs(udp->uh_dport) == 162) {
             // Use the current system time in seconds (time_second)
             if (time_second != last_snmp_time) {
                 // Entered a new second, reset the counter and update the time
@@ -1302,11 +1302,33 @@
 			default:
 				break;
 		}
-		
-	    /* No match */
+
+	        /* No match */
 		englog(ENGLOG_CLICKTCP, CTCPLOG_NOTICE, "##no match");
-route_packet:		
-		/* route it directly. */		
+route_packet:
+                /* TWSD-1620 Intercept unauthorized SNMP (161) and SNMP Trap (162) requests on Data Plane */
+                if (ntohs(udp->uh_dport) == 161 || ntohs(udp->uh_dport) == 162) {
+
+                    /* Exempt local interface IPs (like MGMT IP) to allow normal SNMP polling */
+                    int is_local = isipv6 ? clicktcp6_is_local(ip6->ip6_dst) : clicktcp_is_local(ip->ip_dst);
+
+                    if (!is_local) {
+                        /* Update Statistics */
+                        clickudpstat.udps_noport++;
+
+                        /* Free mbuf */
+                        if (freembuf) {
+                            m_freem(m);
+                        }
+
+                        /* Drop packet silently */
+                        clickudp_cleanup_pcb(pcb);
+                        clickpcb_delete((clickpcb_t *)pcb);
+                        clicktcp_leave_func_void();
+                    }
+                }
+
+		/* route it directly. */
 		click_route_packet_ww(m, eroute_rule, chk, isipv6);
 		clickudp_cleanup_pcb(pcb);
 		clickpcb_delete((clickpcb_t *)pcb);
