diff options
Diffstat (limited to 'pysnmp/carrier/asynsock/dgram/udp6.py')
-rw-r--r-- | pysnmp/carrier/asynsock/dgram/udp6.py | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/pysnmp/carrier/asynsock/dgram/udp6.py b/pysnmp/carrier/asynsock/dgram/udp6.py index c34037d..3b9d9c4 100644 --- a/pysnmp/carrier/asynsock/dgram/udp6.py +++ b/pysnmp/carrier/asynsock/dgram/udp6.py @@ -1,25 +1,35 @@ # Implements asyncore-based UDP6 transport domain -try: - from socket import AF_INET6 -except ImportError: - AF_INET6 = None +from pysnmp.carrier import sockfix +from pysnmp.carrier.base import AbstractTransportAddress from pysnmp.carrier.asynsock.dgram.base import DgramSocketTransport +import socket domainName = snmpUDP6Domain = (1, 3, 6, 1, 2, 1, 100, 1, 2) +class Udp6TransportAddress(tuple, AbstractTransportAddress): pass + class Udp6SocketTransport(DgramSocketTransport): - sockFamily = AF_INET6 + sockFamily = socket.has_ipv6 and socket.AF_INET6 or None + addressType = Udp6TransportAddress def normalizeAddress(self, transportAddress): + if '%' in transportAddress[0]: # strip zone ID - return (transportAddress[0].split('%')[0], - transportAddress[1], - 0, # flowinfo - 0) # scopeid + ta = self.addressType( + (transportAddress[0].split('%')[0], + transportAddress[1], + 0, # flowinfo + 0) # scopeid + ) + else: + ta = self.addressType( + (transportAddress[0], transportAddress[1], 0, 0) + ) + + if isinstance(transportAddress, self.addressType) and \ + transportAddress.getLocalAddress(): + return ta.setLocalAddress(transportAddress.getLocalAddress()) else: - return (transportAddress[0], - transportAddress[1], - 0, # flowinfo - 0) # scopeid + return ta.setLocalAddress(self.getLocalAddress()) Udp6Transport = Udp6SocketTransport |