@@ -1970,6 +1970,88 @@ def _read_option_epb_verdict(self, schema: 'Schema_EPB_VerdictOption', *,
1970
1970
)
1971
1971
return option
1972
1972
1973
+ def _read_option_ns_dnsname (self , schema : 'Schema_NS_DNSNameOption' , * ,
1974
+ options : 'Option' ) -> 'Data_NS_DNSNameOption' :
1975
+ """Read PCAP-NG ``ns_dnsname`` option.
1976
+
1977
+ Args:
1978
+ schema: Parsed option schema.
1979
+ options: Parsed PCAP-NG options.
1980
+
1981
+ Returns:
1982
+ Constructed option data.
1983
+
1984
+ """
1985
+ if self ._type != Enum_BlockType .Name_Resolution_Block :
1986
+ raise ProtocolError (f'PCAP-NG: [ns_dnsname] option must be in Name Resolution Block, '
1987
+ f'but found in { self ._type } block.' )
1988
+ if self ._opt [schema .type ] > 0 :
1989
+ raise ProtocolError (f'PCAP-NG: [ns_dnsname] option must be only one, '
1990
+ f'but { self ._opt [schema .type ] + 1 } found.' )
1991
+
1992
+ option = Data_NS_DNSNameOption (
1993
+ type = schema .type ,
1994
+ length = schema .length ,
1995
+ name = schema .name ,
1996
+ )
1997
+ return option
1998
+
1999
+ def _read_option_ns_dnsipv4 (self , schema : 'Schema_NS_DNSIP4AddrOption' , * ,
2000
+ options : 'Option' ) -> 'Data_NS_DNSIP4AddrOption' :
2001
+ """Read PCAP-NG ``ns_dnsIP4addr`` option.
2002
+
2003
+ Args:
2004
+ schema: Parsed option schema.
2005
+ options: Parsed PCAP-NG options.
2006
+
2007
+ Returns:
2008
+ Constructed option data.
2009
+
2010
+ """
2011
+ if self ._type != Enum_BlockType .Name_Resolution_Block :
2012
+ raise ProtocolError (f'PCAP-NG: [ns_dnsIP4addr] option must be in Name Resolution Block, '
2013
+ f'but found in { self ._type } block.' )
2014
+ if self ._opt [schema .type ] > 0 :
2015
+ raise ProtocolError (f'PCAP-NG: [ns_dnsIP4addr] option must be only one, '
2016
+ f'but { self ._opt [schema .type ] + 1 } found.' )
2017
+ if schema .length != 4 :
2018
+ raise ProtocolError (f'PCAP-NG [ns_dnsIP4addr] invalid length (expected 4, got { schema .length } )' )
2019
+
2020
+ option = Data_NS_DNSIP4AddrOption (
2021
+ type = schema .type ,
2022
+ length = schema .length ,
2023
+ ip = schema .ip ,
2024
+ )
2025
+ return option
2026
+
2027
+ def _read_option_ns_dnsipv6 (self , schema : 'Schema_NS_DNSIP6AddrOption' , * ,
2028
+ options : 'Option' ) -> 'Data_NS_DNSIP6AddrOption' :
2029
+ """Read PCAP-NG ``ns_dnsIP6addr`` option.
2030
+
2031
+ Args:
2032
+ schema: Parsed option schema.
2033
+ options: Parsed PCAP-NG options.
2034
+
2035
+ Returns:
2036
+ Constructed option data.
2037
+
2038
+ """
2039
+ if self ._type != Enum_BlockType .Name_Resolution_Block :
2040
+ raise ProtocolError (f'PCAP-NG: [ns_dnsIP6addr] option must be in Name Resolution Block, '
2041
+ f'but found in { self ._type } block.' )
2042
+ if self ._opt [schema .type ] > 0 :
2043
+ raise ProtocolError (f'PCAP-NG: [ns_dnsIP6addr] option must be only one, '
2044
+ f'but { self ._opt [schema .type ] + 1 } found.' )
2045
+ if schema .length != 16 :
2046
+ raise ProtocolError (f'PCAP-NG [ns_dnsIP6addr] invalid length (expected 16, got { schema .length } )' )
2047
+
2048
+ option = Data_NS_DNSIP6AddrOption (
2049
+ type = schema .type ,
2050
+ length = schema .length ,
2051
+ ip = schema .ip ,
2052
+ )
2053
+ return option
2054
+
1973
2055
1974
2056
1975
2057
def _make_block_unknown (self , block : 'Optional[Data_UnknownBlock]' = None , * ,
@@ -3000,3 +3082,96 @@ def _make_option_epb_verdict(self, type: 'Enum_OptionType', option: 'Optional[Da
3000
3082
verdict = verdict_val ,
3001
3083
value = value ,
3002
3084
)
3085
+
3086
+ def _make_option_ns_dnsname (self , type : 'Enum_OptionType' , option : 'Optional[Data_NS_DNSNameOption]' = None , * ,
3087
+ name : 'str' = '' ,
3088
+ ** kwargs : 'Any' ) -> 'Schema_NS_DNSNameOption' :
3089
+ """Make PCAP-NG ``ns_dnsname`` option.
3090
+
3091
+ Args:
3092
+ type: Option type.
3093
+ option: Option data model.
3094
+ name: DNS server name.
3095
+ **kwargs: Arbitrary keyword arguments.
3096
+
3097
+ Returns:
3098
+ Constructed option schema.
3099
+
3100
+ """
3101
+ if self ._type != Enum_BlockType .Name_Resolution_Block :
3102
+ raise ProtocolError (f'PCAP-NG: [ns_dnsname] option must be in Name Resolution Block, '
3103
+ f'but found in { self ._type } block.' )
3104
+ if self ._opt [type ] > 0 :
3105
+ raise ProtocolError (f'PCAP-NG: [ns_dnsname] option must be only one, '
3106
+ f'but { self ._opt [type ] + 1 } found.' )
3107
+
3108
+ if option is not None :
3109
+ name = option .name
3110
+
3111
+ return Schema_NS_DNSNameOption (
3112
+ type = type ,
3113
+ length = len (name ),
3114
+ name = name ,
3115
+ )
3116
+
3117
+ def _make_option_ns_dnsipv4 (self , type : 'Enum_OptionType' , option : 'Optional[Data_NS_DNSIP4AddrOption]' = None , * ,
3118
+ ip : 'str | bytes | IPv4Address | int' = '8.8.8.8' ,
3119
+ ** kwargs : 'Any' ) -> 'Schema_NS_DNSIP4AddrOption' :
3120
+ """Make PCAP-NG ``ns_dnsip4addr`` option.
3121
+
3122
+ Args:
3123
+ type: Option type.
3124
+ option: Option data model.
3125
+ ip: DNS server IPv4 address.
3126
+ **kwargs: Arbitrary keyword arguments.
3127
+
3128
+ Returns:
3129
+ Constructed option schema.
3130
+
3131
+ """
3132
+ if self ._type != Enum_BlockType .Name_Resolution_Block :
3133
+ raise ProtocolError (f'PCAP-NG: [ns_dnsip4addr] option must be in Name Resolution Block, '
3134
+ f'but found in { self ._type } block.' )
3135
+ if self ._opt [type ] > 0 :
3136
+ raise ProtocolError (f'PCAP-NG: [ns_dnsip4addr] option must be only one, '
3137
+ f'but { self ._opt [type ] + 1 } found.' )
3138
+
3139
+ if option is not None :
3140
+ ip = option .ip
3141
+
3142
+ return Schema_NS_DNSIP4AddrOption (
3143
+ type = type ,
3144
+ length = 4 ,
3145
+ ip = ip ,
3146
+ )
3147
+
3148
+ def _make_option_ns_dnsipv6 (self , type : 'Enum_OptionType' , option : 'Optional[Data_NS_DNSIP6AddrOption]' = None , * ,
3149
+ ip : 'str | bytes | IPv6Address | int' = '8.8.8.8' ,
3150
+ ** kwargs : 'Any' ) -> 'Schema_NS_DNSIP6AddrOption' :
3151
+ """Make PCAP-NG ``ns_dnsip6addr`` option.
3152
+
3153
+ Args:
3154
+ type: Option type.
3155
+ option: Option data model.
3156
+ ip: DNS server IPv6 address.
3157
+ **kwargs: Arbitrary keyword arguments.
3158
+
3159
+ Returns:
3160
+ Constructed option schema.
3161
+
3162
+ """
3163
+ if self ._type != Enum_BlockType .Name_Resolution_Block :
3164
+ raise ProtocolError (f'PCAP-NG: [ns_dnsip6addr] option must be in Name Resolution Block, '
3165
+ f'but found in { self ._type } block.' )
3166
+ if self ._opt [type ] > 0 :
3167
+ raise ProtocolError (f'PCAP-NG: [ns_dnsip6addr] option must be only one, '
3168
+ f'but { self ._opt [type ] + 1 } found.' )
3169
+
3170
+ if option is not None :
3171
+ ip = option .ip
3172
+
3173
+ return Schema_NS_DNSIP6AddrOption (
3174
+ type = type ,
3175
+ length = 16 ,
3176
+ ip = ip ,
3177
+ )
0 commit comments