1#
2# This file is part of pysnmp software.
3#
4# Copyright (c) 2005-2019, Ilya Etingof <etingof@gmail.com>
5# License: http://snmplabs.com/pysnmp/license.html
6#
7# PySNMP MIB module TRANSPORT-ADDRESS-MIB (http://snmplabs.com/pysnmp)
8# ASN.1 source http://mibs.snmplabs.com:80/asn1/TRANSPORT-ADDRESS-MIB
9# Produced by pysmi-0.1.3 at Tue Apr 18 01:08:18 2017
10# On host grommit.local platform Darwin version 16.4.0 by user ilya
11# Using Python version 3.4.2 (v3.4.2:ab2c023a9432, Oct  5 2014, 20:42:22)
12#
13
14from pyasn1.compat.octets import int2oct, oct2int
15from pysnmp import error
16from pysnmp.carrier import sockfix
17import socket
18
19has_ipv6 = socket.has_ipv6
20
21if hasattr(socket, 'inet_ntop') and hasattr(socket, 'inet_pton'):
22    inet_ntop = socket.inet_ntop
23    inet_pton = socket.inet_pton
24else:
25    import sys
26
27    if sys.platform != "win32":
28        from socket import inet_ntoa, inet_aton
29
30        inet_ntop = lambda x, y: inet_ntoa(y)
31        inet_pton = lambda x, y: inet_aton(y)
32        has_ipv6 = False
33    elif has_ipv6:
34        import struct  # The case of old Python at old Windows
35
36
37        def inet_pton(address_family, ip_string):
38            if address_family == socket.AF_INET:
39                return socket.inet_aton(ip_string)
40            elif address_family != socket.AF_INET6:
41                raise socket.error(
42                    'Unknown address family %s' % (address_family,)
43                )
44
45            groups = ip_string.split(":")
46            spaces = groups.count('')
47
48            if '.' in groups[-1]:
49                groups[-1:] = ["%x" % x for x in struct.unpack("!HH", socket.inet_aton(groups[-1]))]
50
51            if spaces == 1:
52                idx = groups.index('')
53                groups[idx:idx + 1] = ['0'] * (8 - len(groups) + 1)
54            elif spaces == 2:
55                zeros = ['0'] * (8 - len(groups) + 2)
56                if ip_string.startswith('::'):
57                    groups[:2] = zeros
58                elif ip_string.endswith('::'):
59                    groups[-2:] = zeros
60                else:
61                    raise socket.error(
62                        'Invalid IPv6 address: "%s"' % (ip_string,)
63                    )
64            elif spaces == 3:
65                if ip_string != '::':
66                    raise socket.error(
67                        'Invalid IPv6 address: "%s"' % (ip_string,)
68                    )
69                return '\x00' * 16
70            elif spaces > 3:
71                raise socket.error(
72                    'Invalid IPv6 address: "%s"' % (ip_string,)
73                )
74
75            groups = [t for t in [int(t, 16) for t in groups] if t & 0xFFFF == t]
76
77            if len(groups) != 8:
78                raise socket.error(
79                    'Invalid IPv6 address: "%s"' % (ip_string,)
80                )
81
82            return struct.pack('!8H', *groups)
83
84
85        def inet_ntop(address_family, packed_ip):
86            if address_family == socket.AF_INET:
87                return socket.inet_ntop(packed_ip)
88            elif address_family != socket.AF_INET6:
89                raise socket.error(
90                    'Unknown address family %s' % (address_family,)
91                )
92
93            if len(packed_ip) != 16:
94                raise socket.error(
95                    'incorrect address length: %s' % len(packed_ip)
96                )
97
98            groups = list(struct.unpack('!8H', packed_ip))
99
100            cur_base = best_base = cur_len = best_len = -1
101
102            for idx in range(8):
103                if groups[idx]:
104                    if cur_base != -1:
105                        if best_base == -1 or cur_len > best_len:
106                            best_base, best_len = cur_base, cur_len
107                        cur_base = -1
108                else:
109                    if cur_base == -1:
110                        cur_base, cur_len = idx, 1
111                    else:
112                        cur_len += 1
113
114            if cur_base != -1:
115                if best_base == -1 or cur_len > best_len:
116                    best_base, best_len = cur_base, cur_len
117
118            if best_base != -1 and best_len > 1:
119                groups[best_base:best_base + best_len] = [':']
120
121            if groups[0] == ':':
122                groups.insert(0, ':')
123            if groups[-1] == ':':
124                groups.append(':')
125
126            f = lambda x: x != ':' and '%x' % x or ''
127
128            return ':'.join([f(x) for x in groups])
129
130Integer, OctetString, ObjectIdentifier = mibBuilder.importSymbols("ASN1", "Integer", "OctetString", "ObjectIdentifier")
131NamedValues, = mibBuilder.importSymbols("ASN1-ENUMERATION", "NamedValues")
132ConstraintsIntersection, ConstraintsUnion, ValueRangeConstraint, ValueSizeConstraint, SingleValueConstraint = mibBuilder.importSymbols("ASN1-REFINEMENT", "ConstraintsIntersection", "ConstraintsUnion", "ValueRangeConstraint", "ValueSizeConstraint", "SingleValueConstraint")
133NotificationGroup, ModuleCompliance = mibBuilder.importSymbols("SNMPv2-CONF", "NotificationGroup", "ModuleCompliance")
134Integer32, Unsigned32, MibIdentifier, Counter32, ModuleIdentity, MibScalar, MibTable, MibTableRow, MibTableColumn, NotificationType, Bits, TimeTicks, ObjectIdentity, Counter64, Gauge32, IpAddress, iso, mib_2 = mibBuilder.importSymbols("SNMPv2-SMI", "Integer32", "Unsigned32", "MibIdentifier", "Counter32", "ModuleIdentity", "MibScalar", "MibTable", "MibTableRow", "MibTableColumn", "NotificationType", "Bits", "TimeTicks", "ObjectIdentity", "Counter64", "Gauge32", "IpAddress", "iso", "mib-2")
135DisplayString, TextualConvention = mibBuilder.importSymbols("SNMPv2-TC", "DisplayString", "TextualConvention")
136transportAddressMIB = ModuleIdentity((1, 3, 6, 1, 2, 1, 100))
137if mibBuilder.loadTexts: transportAddressMIB.setRevisions(('2002-11-01 00:00',))
138if mibBuilder.loadTexts: transportAddressMIB.setLastUpdated('200211010000Z')
139if mibBuilder.loadTexts: transportAddressMIB.setOrganization('IETF Operations and Management Area')
140if mibBuilder.loadTexts: transportAddressMIB.setContactInfo('Juergen Schoenwaelder (Editor) TU Braunschweig Bueltenweg 74/75 38106 Braunschweig, Germany Phone: +49 531 391-3289 EMail: schoenw@ibr.cs.tu-bs.de Send comments to <mibs@ops.ietf.org>.')
141if mibBuilder.loadTexts: transportAddressMIB.setDescription('This MIB module provides commonly used transport address definitions. Copyright (C) The Internet Society (2002). This version of this MIB module is part of RFC 3419; see the RFC itself for full legal notices.')
142transportDomains = MibIdentifier((1, 3, 6, 1, 2, 1, 100, 1))
143transportDomainUdpIpv4 = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 1))
144if mibBuilder.loadTexts: transportDomainUdpIpv4.setStatus('current')
145if mibBuilder.loadTexts: transportDomainUdpIpv4.setDescription('The UDP over IPv4 transport domain. The corresponding transport address is of type TransportAddressIPv4 for global IPv4 addresses.')
146transportDomainUdpIpv6 = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 2))
147if mibBuilder.loadTexts: transportDomainUdpIpv6.setStatus('current')
148if mibBuilder.loadTexts: transportDomainUdpIpv6.setDescription('The UDP over IPv6 transport domain. The corresponding transport address is of type TransportAddressIPv6 for global IPv6 addresses.')
149transportDomainUdpIpv4z = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 3))
150if mibBuilder.loadTexts: transportDomainUdpIpv4z.setStatus('current')
151if mibBuilder.loadTexts: transportDomainUdpIpv4z.setDescription('The UDP over IPv4 transport domain. The corresponding transport address is of type TransportAddressIPv4z for scoped IPv4 addresses with a zone index.')
152transportDomainUdpIpv6z = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 4))
153if mibBuilder.loadTexts: transportDomainUdpIpv6z.setStatus('current')
154if mibBuilder.loadTexts: transportDomainUdpIpv6z.setDescription('The UDP over IPv6 transport domain. The corresponding transport address is of type TransportAddressIPv6z for scoped IPv6 addresses with a zone index.')
155transportDomainTcpIpv4 = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 5))
156if mibBuilder.loadTexts: transportDomainTcpIpv4.setStatus('current')
157if mibBuilder.loadTexts: transportDomainTcpIpv4.setDescription('The TCP over IPv4 transport domain. The corresponding transport address is of type TransportAddressIPv4 for global IPv4 addresses.')
158transportDomainTcpIpv6 = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 6))
159if mibBuilder.loadTexts: transportDomainTcpIpv6.setStatus('current')
160if mibBuilder.loadTexts: transportDomainTcpIpv6.setDescription('The TCP over IPv6 transport domain. The corresponding transport address is of type TransportAddressIPv6 for global IPv6 addresses.')
161transportDomainTcpIpv4z = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 7))
162if mibBuilder.loadTexts: transportDomainTcpIpv4z.setStatus('current')
163if mibBuilder.loadTexts: transportDomainTcpIpv4z.setDescription('The TCP over IPv4 transport domain. The corresponding transport address is of type TransportAddressIPv4z for scoped IPv4 addresses with a zone index.')
164transportDomainTcpIpv6z = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 8))
165if mibBuilder.loadTexts: transportDomainTcpIpv6z.setStatus('current')
166if mibBuilder.loadTexts: transportDomainTcpIpv6z.setDescription('The TCP over IPv6 transport domain. The corresponding transport address is of type TransportAddressIPv6z for scoped IPv6 addresses with a zone index.')
167transportDomainSctpIpv4 = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 9))
168if mibBuilder.loadTexts: transportDomainSctpIpv4.setStatus('current')
169if mibBuilder.loadTexts: transportDomainSctpIpv4.setDescription('The SCTP over IPv4 transport domain. The corresponding transport address is of type TransportAddressIPv4 for global IPv4 addresses. This transport domain usually represents the primary address on multihomed SCTP endpoints.')
170transportDomainSctpIpv6 = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 10))
171if mibBuilder.loadTexts: transportDomainSctpIpv6.setStatus('current')
172if mibBuilder.loadTexts: transportDomainSctpIpv6.setDescription('The SCTP over IPv6 transport domain. The corresponding transport address is of type TransportAddressIPv6 for global IPv6 addresses. This transport domain usually represents the primary address on multihomed SCTP endpoints.')
173transportDomainSctpIpv4z = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 11))
174if mibBuilder.loadTexts: transportDomainSctpIpv4z.setStatus('current')
175if mibBuilder.loadTexts: transportDomainSctpIpv4z.setDescription('The SCTP over IPv4 transport domain. The corresponding transport address is of type TransportAddressIPv4z for scoped IPv4 addresses with a zone index. This transport domain usually represents the primary address on multihomed SCTP endpoints.')
176transportDomainSctpIpv6z = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 12))
177if mibBuilder.loadTexts: transportDomainSctpIpv6z.setStatus('current')
178if mibBuilder.loadTexts: transportDomainSctpIpv6z.setDescription('The SCTP over IPv6 transport domain. The corresponding transport address is of type TransportAddressIPv6z for scoped IPv6 addresses with a zone index. This transport domain usually represents the primary address on multihomed SCTP endpoints.')
179transportDomainLocal = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 13))
180if mibBuilder.loadTexts: transportDomainLocal.setStatus('current')
181if mibBuilder.loadTexts: transportDomainLocal.setDescription('The Posix Local IPC transport domain. The corresponding transport address is of type TransportAddressLocal. The Posix Local IPC transport domain incorporates the well-known UNIX domain sockets.')
182transportDomainUdpDns = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 14))
183if mibBuilder.loadTexts: transportDomainUdpDns.setStatus('current')
184if mibBuilder.loadTexts: transportDomainUdpDns.setDescription('The UDP transport domain using fully qualified domain names. The corresponding transport address is of type TransportAddressDns.')
185transportDomainTcpDns = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 15))
186if mibBuilder.loadTexts: transportDomainTcpDns.setStatus('current')
187if mibBuilder.loadTexts: transportDomainTcpDns.setDescription('The TCP transport domain using fully qualified domain names. The corresponding transport address is of type TransportAddressDns.')
188transportDomainSctpDns = ObjectIdentity((1, 3, 6, 1, 2, 1, 100, 1, 16))
189if mibBuilder.loadTexts: transportDomainSctpDns.setStatus('current')
190if mibBuilder.loadTexts: transportDomainSctpDns.setDescription('The SCTP transport domain using fully qualified domain names. The corresponding transport address is of type TransportAddressDns.')
191
192class TransportDomain(TextualConvention, ObjectIdentifier):
193    description = 'A value that represents a transport domain. Some possible values, such as transportDomainUdpIpv4, are defined in this module. Other possible values can be defined in other MIB modules.'
194    status = 'current'
195
196class TransportAddressType(TextualConvention, Integer32):
197    description = 'A value that represents a transport domain. This is the enumerated version of the transport domain registrations in this MIB module. The enumerated values have the following meaning: unknown(0) unknown transport address type udpIpv4(1) transportDomainUdpIpv4 udpIpv6(2) transportDomainUdpIpv6 udpIpv4z(3) transportDomainUdpIpv4z udpIpv6z(4) transportDomainUdpIpv6z tcpIpv4(5) transportDomainTcpIpv4 tcpIpv6(6) transportDomainTcpIpv6 tcpIpv4z(7) transportDomainTcpIpv4z tcpIpv6z(8) transportDomainTcpIpv6z sctpIpv4(9) transportDomainSctpIpv4 sctpIpv6(10) transportDomainSctpIpv6 sctpIpv4z(11) transportDomainSctpIpv4z sctpIpv6z(12) transportDomainSctpIpv6z local(13) transportDomainLocal udpDns(14) transportDomainUdpDns tcpDns(15) transportDomainTcpDns sctpDns(16) transportDomainSctpDns This textual convention can be used to represent transport domains in situations where a syntax of TransportDomain is unwieldy (for example, when used as an index). The usage of this textual convention implies that additional transport domains can only be supported by updating this MIB module. This extensibility restriction does not apply for the TransportDomain textual convention which allows MIB authors to define additional transport domains independently in other MIB modules.'
198    status = 'current'
199    subtypeSpec = Integer32.subtypeSpec + ConstraintsUnion(SingleValueConstraint(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16))
200    namedValues = NamedValues(("unknown", 0), ("udpIpv4", 1), ("udpIpv6", 2), ("udpIpv4z", 3), ("udpIpv6z", 4), ("tcpIpv4", 5), ("tcpIpv6", 6), ("tcpIpv4z", 7), ("tcpIpv6z", 8), ("sctpIpv4", 9), ("sctpIpv6", 10), ("sctpIpv4z", 11), ("sctpIpv6z", 12), ("local", 13), ("udpDns", 14), ("tcpDns", 15), ("sctpDns", 16))
201
202class TransportAddress(TextualConvention, OctetString):
203    description = "Denotes a generic transport address. A TransportAddress value is always interpreted within the context of a TransportAddressType or TransportDomain value. Every usage of the TransportAddress textual convention MUST specify the TransportAddressType or TransportDomain object which provides the context. Furthermore, MIB authors SHOULD define a separate TransportAddressType or TransportDomain object for each TransportAddress object. It is suggested that the TransportAddressType or TransportDomain is logically registered before the object(s) which use the TransportAddress textual convention if they appear in the same logical row. The value of a TransportAddress object must always be consistent with the value of the associated TransportAddressType or TransportDomain object. Attempts to set a TransportAddress object to a value which is inconsistent with the associated TransportAddressType or TransportDomain must fail with an inconsistentValue error. When this textual convention is used as a syntax of an index object, there may be issues with the limit of 128 sub-identifiers specified in SMIv2, STD 58. In this case, the OBJECT-TYPE declaration MUST include a 'SIZE' clause to limit the number of potential instance sub-identifiers."
204    status = 'current'
205    subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(0, 255)
206
207class TransportAddressIPv4(TextualConvention, OctetString):
208    description = 'Represents a transport address consisting of an IPv4 address and a port number (as used for example by UDP, TCP and SCTP): octets contents encoding 1-4 IPv4 address network-byte order 5-6 port number network-byte order This textual convention SHOULD NOT be used directly in object definitions since it restricts addresses to a specific format. However, if it is used, it MAY be used either on its own or in conjunction with TransportAddressType or TransportDomain as a pair.'
209    status = 'current'
210    displayHint = '1d.1d.1d.1d:2d'
211    subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(6, 6)
212    fixedLength = 6
213
214    def prettyIn(self, value):
215        if isinstance(value, tuple):
216            # Wild hack -- need to implement TextualConvention.prettyIn
217            value = inet_pton(socket.AF_INET, value[0]) + int2oct((value[1] >> 8) & 0xff) + int2oct(value[1] & 0xff)
218        return OctetString.prettyIn(self, value)
219
220    # Socket address syntax coercion
221    def __asSocketAddress(self):
222        if not hasattr(self, '__tuple_value'):
223            v = self.asOctets()
224            self.__tuple_value = (
225                inet_ntop(socket.AF_INET, v[:4]),
226                oct2int(v[4]) << 8 | oct2int(v[5]),
227            )
228        return self.__tuple_value
229
230    def __iter__(self):
231        return iter(self.__asSocketAddress())
232
233    def __getitem__(self, item):
234        return self.__asSocketAddress()[item]
235
236
237class TransportAddressIPv6(TextualConvention, OctetString):
238    description = 'Represents a transport address consisting of an IPv6 address and a port number (as used for example by UDP, TCP and SCTP): octets contents encoding 1-16 IPv6 address network-byte order 17-18 port number network-byte order This textual convention SHOULD NOT be used directly in object definitions since it restricts addresses to a specific format. However, if it is used, it MAY be used either on its own or in conjunction with TransportAddressType or TransportDomain as a pair.'
239    status = 'current'
240    displayHint = '0a[2x:2x:2x:2x:2x:2x:2x:2x]0a:2d'
241    subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(18, 18)
242    fixedLength = 18
243
244    def prettyIn(self, value):
245        if not has_ipv6:
246            raise error.PySnmpError('IPv6 not supported by platform')
247        if isinstance(value, tuple):
248            value = inet_pton(socket.AF_INET6, value[0]) + int2oct((value[1] >> 8) & 0xff) + int2oct(value[1] & 0xff)
249        return OctetString.prettyIn(self, value)
250
251    # Socket address syntax coercion
252    def __asSocketAddress(self):
253        if not hasattr(self, '__tuple_value'):
254            if not has_ipv6:
255                raise error.PySnmpError('IPv6 not supported by platform')
256            v = self.asOctets()
257            self.__tuple_value = (
258                inet_ntop(socket.AF_INET6, v[:16]),
259                oct2int(v[16]) << 8 | oct2int(v[17]),
260                0,  # flowinfo
261                0)  # scopeid
262        return self.__tuple_value
263
264    def __iter__(self):
265        return iter(self.__asSocketAddress())
266
267    def __getitem__(self, item):
268        return self.__asSocketAddress()[item]
269
270class TransportAddressIPv4z(TextualConvention, OctetString):
271    description = 'Represents a transport address consisting of an IPv4 address, a zone index and a port number (as used for example by UDP, TCP and SCTP): octets contents encoding 1-4 IPv4 address network-byte order 5-8 zone index network-byte order 9-10 port number network-byte order This textual convention SHOULD NOT be used directly in object definitions since it restricts addresses to a specific format. However, if it is used, it MAY be used either on its own or in conjunction with TransportAddressType or TransportDomain as a pair.'
272    status = 'current'
273    displayHint = '1d.1d.1d.1d%4d:2d'
274    subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(10, 10)
275    fixedLength = 10
276
277class TransportAddressIPv6z(TextualConvention, OctetString):
278    description = 'Represents a transport address consisting of an IPv6 address, a zone index and a port number (as used for example by UDP, TCP and SCTP): octets contents encoding 1-16 IPv6 address network-byte order 17-20 zone index network-byte order 21-22 port number network-byte order This textual convention SHOULD NOT be used directly in object definitions since it restricts addresses to a specific format. However, if it is used, it MAY be used either on its own or in conjunction with TransportAddressType or TransportDomain as a pair.'
279    status = 'current'
280    displayHint = '0a[2x:2x:2x:2x:2x:2x:2x:2x%4d]0a:2d'
281    subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(22, 22)
282    fixedLength = 22
283
284class TransportAddressLocal(TextualConvention, OctetString):
285    reference = 'Protocol Independent Interfaces (IEEE POSIX 1003.1g)'
286    description = "Represents a POSIX Local IPC transport address: octets contents encoding all POSIX Local IPC address string The Posix Local IPC transport domain subsumes UNIX domain sockets. This textual convention SHOULD NOT be used directly in object definitions since it restricts addresses to a specific format. However, if it is used, it MAY be used either on its own or in conjunction with TransportAddressType or TransportDomain as a pair. When this textual convention is used as a syntax of an index object, there may be issues with the limit of 128 sub-identifiers specified in SMIv2, STD 58. In this case, the OBJECT-TYPE declaration MUST include a 'SIZE' clause to limit the number of potential instance sub-identifiers."
287    status = 'current'
288    displayHint = '1a'
289    subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(1, 255)
290
291class TransportAddressDns(TextualConvention, OctetString):
292    description = "Represents a DNS domain name followed by a colon ':' (ASCII character 0x3A) and a port number in ASCII. The name SHOULD be fully qualified whenever possible. Values of this textual convention are not directly useable as transport-layer addressing information, and require runtime resolution. As such, applications that write them must be prepared for handling errors if such values are not supported, or cannot be resolved (if resolution occurs at the time of the management operation). The DESCRIPTION clause of TransportAddress objects that may have TransportAddressDns values must fully describe how (and when) such names are to be resolved to IP addresses and vice versa. This textual convention SHOULD NOT be used directly in object definitions since it restricts addresses to a specific format. However, if it is used, it MAY be used either on its own or in conjunction with TransportAddressType or TransportDomain as a pair. When this textual convention is used as a syntax of an index object, there may be issues with the limit of 128 sub-identifiers specified in SMIv2, STD 58. In this case, the OBJECT-TYPE declaration MUST include a 'SIZE' clause to limit the number of potential instance sub-identifiers."
293    status = 'current'
294    displayHint = '1a'
295    subtypeSpec = OctetString.subtypeSpec + ValueSizeConstraint(1, 255)
296
297mibBuilder.exportSymbols("TRANSPORT-ADDRESS-MIB", transportDomainUdpIpv6=transportDomainUdpIpv6, TransportDomain=TransportDomain, transportDomainSctpDns=transportDomainSctpDns, PYSNMP_MODULE_ID=transportAddressMIB, TransportAddressType=TransportAddressType, transportDomainTcpIpv4=transportDomainTcpIpv4, TransportAddressIPv6z=TransportAddressIPv6z, transportDomainLocal=transportDomainLocal, TransportAddressLocal=TransportAddressLocal, transportDomainUdpIpv4=transportDomainUdpIpv4, transportDomainUdpIpv4z=transportDomainUdpIpv4z, transportDomains=transportDomains, transportDomainSctpIpv4=transportDomainSctpIpv4, TransportAddressIPv6=TransportAddressIPv6, TransportAddressDns=TransportAddressDns, transportDomainSctpIpv6z=transportDomainSctpIpv6z, transportAddressMIB=transportAddressMIB, transportDomainTcpIpv6z=transportDomainTcpIpv6z, transportDomainSctpIpv6=transportDomainSctpIpv6, transportDomainUdpDns=transportDomainUdpDns, transportDomainTcpIpv6=transportDomainTcpIpv6, transportDomainUdpIpv6z=transportDomainUdpIpv6z, TransportAddressIPv4=TransportAddressIPv4, transportDomainSctpIpv4z=transportDomainSctpIpv4z, transportDomainTcpIpv4z=transportDomainTcpIpv4z, TransportAddress=TransportAddress, transportDomainTcpDns=transportDomainTcpDns, TransportAddressIPv4z=TransportAddressIPv4z)
298