summaryrefslogtreecommitdiff
path: root/pysnmp/carrier/asynsock/dgram/udp6.py
diff options
context:
space:
mode:
Diffstat (limited to 'pysnmp/carrier/asynsock/dgram/udp6.py')
-rw-r--r--pysnmp/carrier/asynsock/dgram/udp6.py36
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