Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
BIND
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
580
Issues
580
List
Boards
Labels
Service Desk
Milestones
Merge Requests
111
Merge Requests
111
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ISC Open Source Projects
BIND
Commits
66922ee7
Commit
66922ee7
authored
Feb 07, 2019
by
Mark Andrews
Committed by
Evan Hunt
Feb 07, 2019
2
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for ATMRELAY
parent
5847318a
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
614 additions
and
1 deletion
+614
-1
bin/tests/system/genzone.sh
bin/tests/system/genzone.sh
+9
-1
bin/tests/system/rrchecker/typelist.good
bin/tests/system/rrchecker/typelist.good
+1
-0
bin/tests/system/xfer/dig1.good
bin/tests/system/xfer/dig1.good
+6
-0
bin/tests/system/xfer/dig2.good
bin/tests/system/xfer/dig2.good
+6
-0
lib/dns/rdata/generic/atmrelay_260.c
lib/dns/rdata/generic/atmrelay_260.c
+467
-0
lib/dns/rdata/generic/atmrelay_260.h
lib/dns/rdata/generic/atmrelay_260.h
+29
-0
lib/dns/tests/rdata_test.c
lib/dns/tests/rdata_test.c
+94
-0
util/copyrights
util/copyrights
+2
-0
No files found.
bin/tests/system/genzone.sh
View file @
66922ee7
...
...
@@ -455,7 +455,15 @@ doa01 DOA ( 1234567890 1234567890 1 "image/gif"
hmsBich1awPAjkY1SZR8bJWrz382SGqIBQQFQd4IsUTaX+ceuudPEQA7 )
doa02 DOA 0 1 2 "" aHR0cHM6Ly93d3cuaXNjLm9yZy8=
; type 260 -- 32767 (unassigned)
; type 260
atmrelay01 ATMRELAY 0 0 0
atmrelay02 ATMRELAY 0 1 0
atmrelay03 ATMRELAY 0 0 1 0.0.0.0
atmrelay04 ATMRELAY 0 0 2 ::
atmrelay05 ATMRELAY 0 0 3 example.net.
atmrelay06 ATMRELAY
\#
2 0004
; type 261 -- 32767 (unassigned)
; type 32768
ta TA 30795 1 1 (
...
...
bin/tests/system/rrchecker/typelist.good
View file @
66922ee7
...
...
@@ -73,5 +73,6 @@ URI
CAA
AVC
DOA
ATMRELAY
TA
DLV
bin/tests/system/xfer/dig1.good
View file @
66922ee7
...
...
@@ -17,6 +17,12 @@ atma01.example. 3600 IN ATMA +61200000000
atma02.example. 3600 IN ATMA +61200000000
atma03.example. 3600 IN ATMA 1234567890abcdef
atma04.example. 3600 IN ATMA fedcba0987654321
atmrelay01.example. 3600 IN ATMRELAY 0 0 0
atmrelay02.example. 3600 IN ATMRELAY 0 1 0
atmrelay03.example. 3600 IN ATMRELAY 0 0 1 0.0.0.0
atmrelay04.example. 3600 IN ATMRELAY 0 0 2 ::
atmrelay05.example. 3600 IN ATMRELAY 0 0 3 example.net.
atmrelay06.example. 3600 IN ATMRELAY \# 2 0004
avc.example. 3600 IN AVC "foo:bar"
caa01.example. 3600 IN CAA 0 issue "ca.example.net; policy=ev"
caa02.example. 3600 IN CAA 128 tbs "Unknown"
...
...
bin/tests/system/xfer/dig2.good
View file @
66922ee7
...
...
@@ -17,6 +17,12 @@ atma01.example. 3600 IN ATMA +61200000000
atma02.example. 3600 IN ATMA +61200000000
atma03.example. 3600 IN ATMA 1234567890abcdef
atma04.example. 3600 IN ATMA fedcba0987654321
atmrelay01.example. 3600 IN ATMRELAY 0 0 0
atmrelay02.example. 3600 IN ATMRELAY 0 1 0
atmrelay03.example. 3600 IN ATMRELAY 0 0 1 0.0.0.1
atmrelay04.example. 3600 IN ATMRELAY 0 0 2 ::
atmrelay05.example. 3600 IN ATMRELAY 0 0 3 example.net.
atmrelay06.example. 3600 IN ATMRELAY \# 2 0004
avc.example. 3600 IN AVC "foo:bar"
caa01.example. 3600 IN CAA 0 issue "ca.example.net; policy=ev"
caa02.example. 3600 IN CAA 128 tbs "Unknown"
...
...
lib/dns/rdata/generic/atmrelay_260.c
0 → 100644
View file @
66922ee7
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef RDATA_GENERIC_ATMRELAY_260_C
#define RDATA_GENERIC_ATMRELAY_260_C
#include <string.h>
#include <isc/net.h>
#define RRTYPE_ATMRELAY_ATTRIBUTES (0)
static
inline
isc_result_t
fromtext_atmrelay
(
ARGS_FROMTEXT
)
{
isc_token_t
token
;
dns_name_t
name
;
isc_buffer_t
buffer
;
unsigned
int
discovery
;
unsigned
int
gateway
;
struct
in_addr
addr
;
unsigned
char
addr6
[
16
];
isc_region_t
region
;
REQUIRE
(
type
==
dns_rdatatype_atmrelay
);
UNUSED
(
type
);
UNUSED
(
rdclass
);
UNUSED
(
callbacks
);
/*
* Precedence.
*/
RETERR
(
isc_lex_getmastertoken
(
lexer
,
&
token
,
isc_tokentype_number
,
false
));
if
(
token
.
value
.
as_ulong
>
0xffU
)
{
RETTOK
(
ISC_R_RANGE
);
}
RETERR
(
uint8_tobuffer
(
token
.
value
.
as_ulong
,
target
));
/*
* Discovery.
*/
RETERR
(
isc_lex_getmastertoken
(
lexer
,
&
token
,
isc_tokentype_number
,
false
));
if
(
token
.
value
.
as_ulong
>
1U
)
{
RETTOK
(
ISC_R_RANGE
);
}
discovery
=
token
.
value
.
as_ulong
;
/*
* Gateway type.
*/
RETERR
(
isc_lex_getmastertoken
(
lexer
,
&
token
,
isc_tokentype_number
,
false
));
if
(
token
.
value
.
as_ulong
>
0x7fU
)
RETTOK
(
ISC_R_RANGE
);
RETERR
(
uint8_tobuffer
(
token
.
value
.
as_ulong
|
(
discovery
<<
7
),
target
));
gateway
=
token
.
value
.
as_ulong
;
if
(
gateway
==
0
)
{
return
(
ISC_R_SUCCESS
);
}
if
(
gateway
>
3
)
{
return
(
ISC_R_NOTIMPLEMENTED
);
}
/*
* Gateway.
*/
RETERR
(
isc_lex_getmastertoken
(
lexer
,
&
token
,
isc_tokentype_string
,
false
));
switch
(
gateway
)
{
case
1
:
if
(
inet_pton
(
AF_INET
,
DNS_AS_STR
(
token
),
&
addr
)
!=
1
)
{
RETTOK
(
DNS_R_BADDOTTEDQUAD
);
}
isc_buffer_availableregion
(
target
,
&
region
);
if
(
region
.
length
<
4
)
{
return
(
ISC_R_NOSPACE
);
}
memmove
(
region
.
base
,
&
addr
,
4
);
isc_buffer_add
(
target
,
4
);
return
(
ISC_R_SUCCESS
);
case
2
:
if
(
inet_pton
(
AF_INET6
,
DNS_AS_STR
(
token
),
addr6
)
!=
1
)
{
RETTOK
(
DNS_R_BADAAAA
);
}
isc_buffer_availableregion
(
target
,
&
region
);
if
(
region
.
length
<
16
)
{
return
(
ISC_R_NOSPACE
);
}
memmove
(
region
.
base
,
addr6
,
16
);
isc_buffer_add
(
target
,
16
);
return
(
ISC_R_SUCCESS
);
case
3
:
dns_name_init
(
&
name
,
NULL
);
buffer_fromregion
(
&
buffer
,
&
token
.
value
.
as_region
);
if
(
origin
==
NULL
)
{
origin
=
dns_rootname
;
}
return
(
dns_name_fromtext
(
&
name
,
&
buffer
,
origin
,
options
,
target
));
default:
INSIST
(
0
);
ISC_UNREACHABLE
();
}
}
static
inline
isc_result_t
totext_atmrelay
(
ARGS_TOTEXT
)
{
isc_region_t
region
;
dns_name_t
name
;
char
buf
[
sizeof
(
"0 255 "
)];
unsigned
char
precedence
;
unsigned
char
discovery
;
unsigned
char
gateway
;
const
char
*
space
;
UNUSED
(
tctx
);
REQUIRE
(
rdata
->
type
==
dns_rdatatype_atmrelay
);
REQUIRE
(
rdata
->
length
>=
2
);
if
((
rdata
->
data
[
1
]
&
0x7f
)
>
3U
)
return
(
ISC_R_NOTIMPLEMENTED
);
/*
* Precedence.
*/
dns_rdata_toregion
(
rdata
,
&
region
);
precedence
=
uint8_fromregion
(
&
region
);
isc_region_consume
(
&
region
,
1
);
snprintf
(
buf
,
sizeof
(
buf
),
"%u "
,
precedence
);
RETERR
(
str_totext
(
buf
,
target
));
/*
* Discovery and Gateway type.
*/
gateway
=
uint8_fromregion
(
&
region
);
discovery
=
gateway
>>
7
;
gateway
&=
0x7f
;
space
=
(
gateway
!=
0U
)
?
" "
:
""
;
isc_region_consume
(
&
region
,
1
);
snprintf
(
buf
,
sizeof
(
buf
),
"%u %u%s"
,
discovery
,
gateway
,
space
);
RETERR
(
str_totext
(
buf
,
target
));
/*
* Gateway.
*/
switch
(
gateway
)
{
case
0
:
break
;
case
1
:
return
(
inet_totext
(
AF_INET
,
&
region
,
target
));
case
2
:
return
(
inet_totext
(
AF_INET6
,
&
region
,
target
));
case
3
:
dns_name_init
(
&
name
,
NULL
);
dns_name_fromregion
(
&
name
,
&
region
);
return
(
dns_name_totext
(
&
name
,
false
,
target
));
default:
INSIST
(
0
);
ISC_UNREACHABLE
();
}
return
(
ISC_R_SUCCESS
);
}
static
inline
isc_result_t
fromwire_atmrelay
(
ARGS_FROMWIRE
)
{
dns_name_t
name
;
isc_region_t
region
;
REQUIRE
(
type
==
dns_rdatatype_atmrelay
);
UNUSED
(
type
);
UNUSED
(
rdclass
);
dns_decompress_setmethods
(
dctx
,
DNS_COMPRESS_NONE
);
isc_buffer_activeregion
(
source
,
&
region
);
if
(
region
.
length
<
2
)
return
(
ISC_R_UNEXPECTEDEND
);
switch
(
region
.
base
[
1
]
&
0x7f
)
{
case
0
:
if
(
region
.
length
!=
2
)
{
return
(
DNS_R_FORMERR
);
}
isc_buffer_forward
(
source
,
region
.
length
);
return
(
mem_tobuffer
(
target
,
region
.
base
,
region
.
length
));
case
1
:
if
(
region
.
length
!=
6
)
{
return
(
DNS_R_FORMERR
);
}
isc_buffer_forward
(
source
,
region
.
length
);
return
(
mem_tobuffer
(
target
,
region
.
base
,
region
.
length
));
case
2
:
if
(
region
.
length
!=
18
)
{
return
(
DNS_R_FORMERR
);
}
isc_buffer_forward
(
source
,
region
.
length
);
return
(
mem_tobuffer
(
target
,
region
.
base
,
region
.
length
));
case
3
:
RETERR
(
mem_tobuffer
(
target
,
region
.
base
,
2
));
isc_buffer_forward
(
source
,
2
);
dns_name_init
(
&
name
,
NULL
);
return
(
dns_name_fromwire
(
&
name
,
source
,
dctx
,
options
,
target
));
default:
isc_buffer_forward
(
source
,
region
.
length
);
return
(
mem_tobuffer
(
target
,
region
.
base
,
region
.
length
));
}
}
static
inline
isc_result_t
towire_atmrelay
(
ARGS_TOWIRE
)
{
isc_region_t
region
;
REQUIRE
(
rdata
->
type
==
dns_rdatatype_atmrelay
);
REQUIRE
(
rdata
->
length
!=
0
);
UNUSED
(
cctx
);
dns_rdata_toregion
(
rdata
,
&
region
);
return
(
mem_tobuffer
(
target
,
region
.
base
,
region
.
length
));
}
static
inline
int
compare_atmrelay
(
ARGS_COMPARE
)
{
isc_region_t
region1
;
isc_region_t
region2
;
REQUIRE
(
rdata1
->
type
==
rdata2
->
type
);
REQUIRE
(
rdata1
->
rdclass
==
rdata2
->
rdclass
);
REQUIRE
(
rdata1
->
type
==
dns_rdatatype_atmrelay
);
REQUIRE
(
rdata1
->
length
>=
2
);
REQUIRE
(
rdata2
->
length
>=
2
);
dns_rdata_toregion
(
rdata1
,
&
region1
);
dns_rdata_toregion
(
rdata2
,
&
region2
);
return
(
isc_region_compare
(
&
region1
,
&
region2
));
}
static
inline
isc_result_t
fromstruct_atmrelay
(
ARGS_FROMSTRUCT
)
{
dns_rdata_atmrelay_t
*
atmrelay
=
source
;
isc_region_t
region
;
uint32_t
n
;
REQUIRE
(
type
==
dns_rdatatype_atmrelay
);
REQUIRE
(
source
!=
NULL
);
REQUIRE
(
atmrelay
->
common
.
rdtype
==
type
);
REQUIRE
(
atmrelay
->
common
.
rdclass
==
rdclass
);
UNUSED
(
type
);
UNUSED
(
rdclass
);
RETERR
(
uint8_tobuffer
(
atmrelay
->
precedence
,
target
));
n
=
(
atmrelay
->
discovery
?
0x80
:
0
)
|
atmrelay
->
gateway_type
;
RETERR
(
uint8_tobuffer
(
n
,
target
));
switch
(
atmrelay
->
gateway_type
)
{
case
0
:
return
(
ISC_R_SUCCESS
);
case
1
:
n
=
ntohl
(
atmrelay
->
in_addr
.
s_addr
);
return
(
uint32_tobuffer
(
n
,
target
));
case
2
:
return
(
mem_tobuffer
(
target
,
atmrelay
->
in6_addr
.
s6_addr
,
16
));
break
;
case
3
:
dns_name_toregion
(
&
atmrelay
->
gateway
,
&
region
);
return
(
isc_buffer_copyregion
(
target
,
&
region
));
break
;
default:
return
(
mem_tobuffer
(
target
,
atmrelay
->
data
,
atmrelay
->
length
));
}
}
static
inline
isc_result_t
tostruct_atmrelay
(
ARGS_TOSTRUCT
)
{
isc_region_t
region
;
dns_rdata_atmrelay_t
*
atmrelay
=
target
;
dns_name_t
name
;
uint32_t
n
;
REQUIRE
(
rdata
->
type
==
dns_rdatatype_atmrelay
);
REQUIRE
(
target
!=
NULL
);
REQUIRE
(
rdata
->
length
>=
2
);
atmrelay
->
common
.
rdclass
=
rdata
->
rdclass
;
atmrelay
->
common
.
rdtype
=
rdata
->
type
;
ISC_LINK_INIT
(
&
atmrelay
->
common
,
link
);
dns_name_init
(
&
atmrelay
->
gateway
,
NULL
);
atmrelay
->
data
=
NULL
;
dns_name_init
(
&
name
,
NULL
);
dns_rdata_toregion
(
rdata
,
&
region
);
atmrelay
->
precedence
=
uint8_fromregion
(
&
region
);
isc_region_consume
(
&
region
,
1
);
atmrelay
->
gateway_type
=
uint8_fromregion
(
&
region
);
atmrelay
->
discovery
=
(
atmrelay
->
gateway_type
&
0x80
)
!=
0
;
atmrelay
->
gateway_type
&=
0x7f
;
isc_region_consume
(
&
region
,
1
);
switch
(
atmrelay
->
gateway_type
)
{
case
0
:
break
;
case
1
:
n
=
uint32_fromregion
(
&
region
);
atmrelay
->
in_addr
.
s_addr
=
htonl
(
n
);
isc_region_consume
(
&
region
,
4
);
break
;
case
2
:
memmove
(
atmrelay
->
in6_addr
.
s6_addr
,
region
.
base
,
16
);
isc_region_consume
(
&
region
,
16
);
break
;
case
3
:
dns_name_fromregion
(
&
name
,
&
region
);
RETERR
(
name_duporclone
(
&
name
,
mctx
,
&
atmrelay
->
gateway
));
isc_region_consume
(
&
region
,
name_length
(
&
name
));
break
;
default:
if
(
region
.
length
!=
0
)
{
atmrelay
->
data
=
mem_maybedup
(
mctx
,
region
.
base
,
region
.
length
);
if
(
atmrelay
->
data
==
NULL
)
{
return
(
ISC_R_NOMEMORY
);
}
}
atmrelay
->
length
=
region
.
length
;
}
atmrelay
->
mctx
=
mctx
;
return
(
ISC_R_SUCCESS
);
}
static
inline
void
freestruct_atmrelay
(
ARGS_FREESTRUCT
)
{
dns_rdata_atmrelay_t
*
atmrelay
=
source
;
REQUIRE
(
source
!=
NULL
);
REQUIRE
(
atmrelay
->
common
.
rdtype
==
dns_rdatatype_atmrelay
);
if
(
atmrelay
->
mctx
==
NULL
)
return
;
if
(
atmrelay
->
gateway_type
==
3
)
dns_name_free
(
&
atmrelay
->
gateway
,
atmrelay
->
mctx
);
if
(
atmrelay
->
data
!=
NULL
)
isc_mem_free
(
atmrelay
->
mctx
,
atmrelay
->
data
);
atmrelay
->
mctx
=
NULL
;
}
static
inline
isc_result_t
additionaldata_atmrelay
(
ARGS_ADDLDATA
)
{
REQUIRE
(
rdata
->
type
==
dns_rdatatype_atmrelay
);
UNUSED
(
rdata
);
UNUSED
(
add
);
UNUSED
(
arg
);
return
(
ISC_R_SUCCESS
);
}
static
inline
isc_result_t
digest_atmrelay
(
ARGS_DIGEST
)
{
isc_region_t
region
;
REQUIRE
(
rdata
->
type
==
dns_rdatatype_atmrelay
);
dns_rdata_toregion
(
rdata
,
&
region
);
return
((
digest
)(
arg
,
&
region
));
}
static
inline
bool
checkowner_atmrelay
(
ARGS_CHECKOWNER
)
{
REQUIRE
(
type
==
dns_rdatatype_atmrelay
);
UNUSED
(
name
);
UNUSED
(
type
);
UNUSED
(
rdclass
);
UNUSED
(
wildcard
);
return
(
true
);
}
static
inline
bool
checknames_atmrelay
(
ARGS_CHECKNAMES
)
{
REQUIRE
(
rdata
->
type
==
dns_rdatatype_atmrelay
);
UNUSED
(
rdata
);
UNUSED
(
owner
);
UNUSED
(
bad
);
return
(
true
);
}
static
inline
int
casecompare_atmrelay
(
ARGS_COMPARE
)
{
isc_region_t
region1
;
isc_region_t
region2
;
dns_name_t
name1
;
dns_name_t
name2
;
REQUIRE
(
rdata1
->
type
==
rdata2
->
type
);
REQUIRE
(
rdata1
->
rdclass
==
rdata2
->
rdclass
);
REQUIRE
(
rdata1
->
type
==
dns_rdatatype_atmrelay
);
REQUIRE
(
rdata1
->
length
>=
2
);
REQUIRE
(
rdata2
->
length
>=
2
);
dns_rdata_toregion
(
rdata1
,
&
region1
);
dns_rdata_toregion
(
rdata2
,
&
region2
);
if
(
memcmp
(
region1
.
base
,
region2
.
base
,
2
)
!=
0
||
(
region1
.
base
[
1
]
&
0x7f
)
!=
3
)
return
(
isc_region_compare
(
&
region1
,
&
region2
));
dns_name_init
(
&
name1
,
NULL
);
dns_name_init
(
&
name2
,
NULL
);
isc_region_consume
(
&
region1
,
2
);
isc_region_consume
(
&
region2
,
2
);
dns_name_fromregion
(
&
name1
,
&
region1
);
dns_name_fromregion
(
&
name2
,
&
region2
);
return
(
dns_name_rdatacompare
(
&
name1
,
&
name2
));
}
#endif
/* RDATA_GENERIC_ATMRELAY_260_C */
lib/dns/rdata/generic/atmrelay_260.h
0 → 100644
View file @
66922ee7
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* See the COPYRIGHT file distributed with this work for additional
* information regarding copyright ownership.
*/
#ifndef GENERIC_ATMRELAY_260_H
#define GENERIC_ATMRELAY_260_H 1
typedef
struct
dns_rdata_atmrelay
{
dns_rdatacommon_t
common
;
isc_mem_t
*
mctx
;
uint8_t
precedence
;
bool
discovery
;
uint8_t
gateway_type
;
struct
in_addr
in_addr
;
/* gateway type 1 */
struct
in6_addr
in6_addr
;
/* gateway type 2 */
dns_name_t
gateway
;
/* gateway type 3 */
unsigned
char
*
data
;
/* gateway type > 3 */
uint16_t
length
;
}
dns_rdata_atmrelay_t
;
#endif
/* GENERIC_ATMRELAY_260_H */
lib/dns/tests/rdata_test.c
View file @
66922ee7
...
...
@@ -563,6 +563,99 @@ atma(void **state) {
dns_rdatatype_atma
,
sizeof
(
dns_rdata_in_atma_t
));
}
/* ATMRELAY RDATA manipulations */
static
void
atmrelay
(
void
**
state
)
{
text_ok_t
text_ok
[]
=
{
TEXT_INVALID
(
""
),
TEXT_INVALID
(
"0"
),
TEXT_INVALID
(
"0 0"
),
/* gatway type 0 */
TEXT_VALID
(
"0 0 0"
),
TEXT_VALID
(
"0 1 0"
),
TEXT_INVALID
(
"0 2 0"
),
/* discovery out of range */
TEXT_VALID
(
"255 1 0"
),
/* max precendence */
TEXT_INVALID
(
"256 1 0"
),
/* precedence out of range */
/* IPv4 gateway */
TEXT_INVALID
(
"0 0 1"
),
/* no addresss */
TEXT_VALID
(
"0 0 1 0.0.0.0"
),
TEXT_INVALID
(
"0 0 1 0.0.0.0 x"
),
/* extra */
TEXT_INVALID
(
"0 0 1 0.0.0.0.0"
),
/* bad addresss */
TEXT_INVALID
(
"0 0 1 ::"
),
/* bad addresss */
TEXT_INVALID
(
"0 0 1 ."
),
/* bad addresss */
/* IPv6 gateway */
TEXT_INVALID
(
"0 0 2"
),
/* no addresss */
TEXT_VALID
(
"0 0 2 ::"
),
TEXT_INVALID
(
"0 0 2 :: xx"
),
/* extra */
TEXT_INVALID
(
"0 0 2 0.0.0.0"
),
/* bad addresss */
TEXT_INVALID
(
"0 0 2 ."
),
/* bad addresss */
/* hostname gateway */
TEXT_INVALID
(
"0 0 3"
),
/* no name */
/* IPv4 is a valid name */
TEXT_VALID_CHANGED
(
"0 0 3 0.0.0.0"
,
"0 0 3 0.0.0.0."
),
/* IPv6 is a valid name */
TEXT_VALID_CHANGED
(
"0 0 3 ::"
,
"0 0 3 ::."
),
TEXT_VALID_CHANGED
(
"0 0 3 example"
,
"0 0 3 example."
),
TEXT_VALID
(
"0 0 3 example."
),
TEXT_INVALID
(
"0 0 3 example. x"
),
/* extra */
/* unknown gateway */
TEXT_VALID
(
"
\\
# 2 0004"
),
TEXT_VALID
(
"
\\
# 2 0084"
),
TEXT_VALID
(
"
\\
# 2 007F"
),
TEXT_VALID
(
"
\\
# 3 000400"
),
TEXT_VALID
(
"
\\
# 3 008400"
),
TEXT_VALID
(
"
\\
# 3 00FF00"
),
/*
* Sentinel.
*/
TEXT_SENTINEL
()
};
wire_ok_t
wire_ok
[]
=
{
WIRE_INVALID
(
0x00
),
WIRE_VALID
(
0x00
,
0x00
),
WIRE_VALID
(
0x00
,
0x80
),
WIRE_INVALID
(
0x00
,
0x00
,
0x00
),
WIRE_INVALID
(
0x00
,
0x80
,
0x00
),
WIRE_INVALID
(
0x00
,
0x01
),
WIRE_INVALID
(
0x00
,
0x01
,
0x00
),
WIRE_INVALID
(
0x00
,
0x01
,
0x00
,
0x00
),
WIRE_INVALID
(
0x00
,
0x01
,
0x00
,
0x00
,
0x00
),
WIRE_VALID
(
0x00
,
0x01
,
0x00
,
0x00
,
0x00
,
0x00
),
WIRE_INVALID
(
0x00
,
0x01
,
0x00
,
0x00
,
0x00
,
0x00
,
0x00
),
WIRE_INVALID
(
0x00
,
0x02
),
WIRE_INVALID
(
0x00
,
0x02
,
0x00
),
WIRE_VALID
(
0x00
,
0x02
,
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
),
WIRE_INVALID
(
0x00
,
0x02
,
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
),
WIRE_INVALID
(
0x00
,
0x03
),
WIRE_VALID
(
0x00
,
0x03
,
0x00
),
WIRE_INVALID
(
0x00
,
0x03
,
0x00
,
0x00
),
/* extra */
WIRE_VALID
(
0x00
,
0x04
),
WIRE_VALID
(
0x00
,
0x04
,
0x00
),