mirror of
https://git.FreeBSD.org/src.git
synced 2025-01-01 12:19:28 +00:00
- do hexdump on send. set length field properly
- check for encryption/authentication key together with algorithm. - warned if a deprecated encryption algorithm (that includes "simple") is specified. - changed the syntax how to define a policy of a ICMPv6 type and/or a code, like spdadd ::/0 ::/0 icmp6 134,0 -P out none; - random cleanup in parser. - use yyfatal, or return -1 after yyerror. - deal with strdup() failure. - permit scope notation in policy string (-P esp/tunnel/foo%scope-bar%scope/use) - simplify /prefix and [port]. - g/c some unused symbols. Obtained from: KAME
This commit is contained in:
parent
bd9f52d566
commit
cf43a05493
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=122108
@ -39,7 +39,7 @@ LDADD= -ll -ly
|
||||
|
||||
CLEANFILES= y.tab.c y.tab.h key_test.o keytest
|
||||
|
||||
# libpfkey.
|
||||
# libpfkey
|
||||
# ipsec_strerror.c is for avoiding shlib reference to non-exported function.
|
||||
.PATH: ${.CURDIR}/../../lib/libipsec ${.CURDIR}/../../sys/netkey
|
||||
SRCS+= pfkey.c pfkey_dump.c key_debug.c ipsec_strerror.c
|
||||
|
1414
sbin/setkey/parse.y
1414
sbin/setkey/parse.y
File diff suppressed because it is too large
Load Diff
@ -45,9 +45,9 @@
|
||||
#
|
||||
# At Host-A and Host-B,
|
||||
spdadd fec0::10[any] fec0::11[110] tcp -P out ipsec
|
||||
esp/transport/fec0::10-fec0::11/use ;
|
||||
esp/transport//use ;
|
||||
spdadd fec0::11[110] fec0::10[any] tcp -P in ipsec
|
||||
esp/transport/fec0::11-fec0::10/use ;
|
||||
esp/transport//use ;
|
||||
add fec0::10 fec0::11 esp 0x10001
|
||||
-m transport
|
||||
-E blowfish-cbc "kamekame"
|
||||
@ -112,10 +112,10 @@ add 172.16.0.2 172.16.0.1 ah-old 0x10004
|
||||
# At Gateway-A:
|
||||
spdadd fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out ipsec
|
||||
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require
|
||||
ah/transport/fec0:0:0:1::1-fec0:0:0:2::1/require ;
|
||||
ah/transport//require ;
|
||||
spdadd fec0:0:0:2::/64 fec0:0:0:1::/64 any -P in ipsec
|
||||
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require
|
||||
ah/transport/fec0:0:0:2::1-fec0:0:0:1::1/require ;
|
||||
ah/transport//require ;
|
||||
add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10001
|
||||
-m tunnel
|
||||
-E 3des-cbc "kamekame12341234kame1234"
|
||||
@ -146,10 +146,10 @@ add fec0:0:0:2::1 fec0:0:0:1::1 ah 0x10001
|
||||
#
|
||||
# At Host-A:
|
||||
spdadd fec0:0:0:1::1[any] fec0:0:0:2::2[80] tcp -P out ipsec
|
||||
esp/transport/fec0:0:0:1::1-fec0:0:0:2::2/use
|
||||
esp/transport//use
|
||||
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ;
|
||||
spdadd fec0:0:0:2::1[80] fec0:0:0:1::1[any] tcp -P in ipsec
|
||||
esp/transport/fec0:0:0:2::2-fec0:0:0:1::1/use
|
||||
esp/transport//use
|
||||
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ;
|
||||
add fec0:0:0:1::1 fec0:0:0:2::2 esp 0x10001
|
||||
-m transport
|
||||
@ -166,10 +166,10 @@ add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10004
|
||||
-E rc5-cbc "kamekame"
|
||||
-A hmac-md5 "this is the test" ;
|
||||
|
||||
# By "get" command, you can get an entry of either SP or SA.
|
||||
# By "get" command, you can get a entry of either SP or SA.
|
||||
get fec0:0:0:1::1 fec0:0:0:2::2 ah 0x10004 ;
|
||||
|
||||
# Also delete command, you can delete an entry of either SP or SA.
|
||||
# Also delete command, you can delete a entry of either SP or SA.
|
||||
spddelete fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out;
|
||||
delete fec0:0:0:1::1 fec0:0:0:2::2 ah 0x10004 ;
|
||||
|
||||
@ -188,24 +188,24 @@ dump esp ;
|
||||
flush ah ;
|
||||
|
||||
# XXX
|
||||
add ::1 ::1 esp 10001 -m transport -E simple ;
|
||||
add ::1 ::1 esp 10001 -m transport -E null ;
|
||||
add ::1 ::1 esp 10002 -m transport -E des-deriv "12341234" ;
|
||||
add ::1 ::1 esp-old 10003 -m transport -E des-32iv "12341234" ;
|
||||
add ::1 ::1 esp 10004 -m transport -E simple -A null ;
|
||||
add ::1 ::1 esp 10005 -m transport -E simple -A hmac-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10006 -m tunnel -E simple -A hmac-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10007 -m transport -E simple -A keyed-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10008 -m any -E simple -A keyed-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10004 -m transport -E null -A null ;
|
||||
add ::1 ::1 esp 10005 -m transport -E null -A hmac-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10006 -m tunnel -E null -A hmac-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10007 -m transport -E null -A keyed-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10008 -m any -E null -A keyed-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10009 -m transport -E des-cbc "testtest" ;
|
||||
add ::1 ::1 esp 10010 -m transport -E 3des-cbc "testtest12341234testtest" ;
|
||||
add ::1 ::1 esp 10011 -m tunnel -E cast128-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10012 -m tunnel -E blowfish-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10013 -m tunnel -E rc5-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10014 -m any -E rc5-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10015 -m transport -f zero-pad -E simple ;
|
||||
add ::1 ::1 esp 10016 -m tunnel -f random-pad -r 8 -lh 100 -ls 80 -E simple ;
|
||||
add ::1 ::1 esp 10017 -m transport -f seq-pad -f nocyclic-seq -E simple ;
|
||||
add ::1 ::1 esp 10018 -m transport -E simple ;
|
||||
add ::1 ::1 esp 10015 -m transport -f zero-pad -E null ;
|
||||
add ::1 ::1 esp 10016 -m tunnel -f random-pad -r 8 -lh 100 -ls 80 -E null ;
|
||||
add ::1 ::1 esp 10017 -m transport -f seq-pad -f nocyclic-seq -E null ;
|
||||
add ::1 ::1 esp 10018 -m transport -E null ;
|
||||
#add ::1 ::1 ah 20000 -m transport -A null ;
|
||||
add ::1 ::1 ah 20001 -m any -A hmac-md5 "1234123412341234";
|
||||
add ::1 ::1 ah 20002 -m tunnel -A hmac-sha1 "12341234123412341234";
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" $KAME: setkey.8,v 1.49 2001/05/18 05:49:51 sakane Exp $
|
||||
.\" $KAME: setkey.8,v 1.89 2003/09/07 22:17:41 itojun Exp $
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.\" Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
|
||||
@ -34,20 +34,20 @@
|
||||
.\"
|
||||
.Sh NAME
|
||||
.Nm setkey
|
||||
.Nd "manually manipulate the IPsec SA/SP database"
|
||||
.Nd manually manipulate the IPsec SA/SP database
|
||||
.\"
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl dv
|
||||
.Op Fl v
|
||||
.Fl c
|
||||
.Nm
|
||||
.Op Fl dv
|
||||
.Op Fl v
|
||||
.Fl f Ar filename
|
||||
.Nm
|
||||
.Op Fl adPlv
|
||||
.Op Fl aPlv
|
||||
.Fl D
|
||||
.Nm
|
||||
.Op Fl dPv
|
||||
.Op Fl Pv
|
||||
.Fl F
|
||||
.Nm
|
||||
.Op Fl h
|
||||
@ -56,19 +56,23 @@
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility adds, updates, dumps, or flushes
|
||||
command adds, updates, dumps, or flushes
|
||||
Security Association Database (SAD) entries
|
||||
as well as Security Policy Database (SPD) entries in the kernel.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
utility takes a series of operations from the standard input
|
||||
(if invoked with
|
||||
.Fl c )
|
||||
command takes a series of operations from the standard input
|
||||
.Po
|
||||
if invoked with
|
||||
.Fl c
|
||||
.Pc
|
||||
or the file named
|
||||
.Ar filename
|
||||
(if invoked with
|
||||
.Fl f Ar filename ) .
|
||||
.Po
|
||||
if invoked with
|
||||
.Fl f Ar filename
|
||||
.Pc .
|
||||
.Bl -tag -width Ds
|
||||
.It Fl D
|
||||
Dump the SAD entries.
|
||||
@ -81,24 +85,15 @@ If with
|
||||
.Fl P ,
|
||||
the SPD entries are flushed.
|
||||
.It Fl a
|
||||
Dead SAD entries are usually not displayed with
|
||||
.Nm
|
||||
usually does not display dead SAD entries with
|
||||
.Fl D .
|
||||
If with
|
||||
.Fl a ,
|
||||
the dead SAD entries will be displayed as well.
|
||||
A dead SAD entry means that
|
||||
it has been expired but remains
|
||||
because it is referenced by SPD entries.
|
||||
.It Fl d
|
||||
Enable to print debugging messages for command parser,
|
||||
without talking to kernel.
|
||||
It is not used usually.
|
||||
.It Fl x
|
||||
Loop forever and dump all the messages transmitted to
|
||||
.Dv PF_KEY
|
||||
socket.
|
||||
.Fl xx
|
||||
makes each timestamps unformatted.
|
||||
it has been expired but remains in the system
|
||||
because it is referenced by some SPD entries.
|
||||
.It Fl h
|
||||
Add hexadecimal dump on
|
||||
.Fl x
|
||||
@ -111,23 +106,39 @@ Be verbose.
|
||||
The program will dump messages exchanged on
|
||||
.Dv PF_KEY
|
||||
socket, including messages sent from other processes to the kernel.
|
||||
.It Fl x
|
||||
Loop forever and dump all the messages transmitted to
|
||||
.Dv PF_KEY
|
||||
socket.
|
||||
.Fl xx
|
||||
makes each timestamps unformatted.
|
||||
.El
|
||||
.Pp
|
||||
Operations have the following grammar.
|
||||
Note that lines starting with
|
||||
hashmarks ('#') are treated as comment lines.
|
||||
.Ss Configuration syntax
|
||||
With
|
||||
.Fl c
|
||||
or
|
||||
.Fl f
|
||||
on the command line,
|
||||
.Nm
|
||||
accepts the following configuration syntax.
|
||||
Lines starting with hash signs ('#') are treated as comment lines.
|
||||
.Bl -tag -width Ds
|
||||
.It Xo
|
||||
.Li add
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol Ar spi
|
||||
.Op Ar extensions
|
||||
.Ar algorithm...
|
||||
.Ar algorithm ...
|
||||
.Li ;
|
||||
.Xc
|
||||
Add an SAD entry.
|
||||
.Li add
|
||||
can fail with multiple reasons,
|
||||
including when the key length does not match the specified algorithm.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li get
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol Ar spi
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -135,6 +146,7 @@ Show an SAD entry.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li delete
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol Ar spi
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -142,6 +154,7 @@ Remove an SAD entry.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li deleteall
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -153,6 +166,8 @@ Remove all SAD entries that match the specification.
|
||||
.Li ;
|
||||
.Xc
|
||||
Clear all SAD entries matched by the options.
|
||||
.Fl F
|
||||
on the command line achieves the same functionality.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li dump
|
||||
@ -160,9 +175,12 @@ Clear all SAD entries matched by the options.
|
||||
.Li ;
|
||||
.Xc
|
||||
Dumps all SAD entries matched by the options.
|
||||
.Fl D
|
||||
on the command line achieves the same functionality.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li spdadd
|
||||
.Op Fl 46n
|
||||
.Ar src_range Ar dst_range Ar upperspec Ar policy
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -170,6 +188,7 @@ Add an SPD entry.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li spddelete
|
||||
.Op Fl 46n
|
||||
.Ar src_range Ar dst_range Ar upperspec Fl P Ar direction
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -180,12 +199,16 @@ Delete an SPD entry.
|
||||
.Li ;
|
||||
.Xc
|
||||
Clear all SPD entries.
|
||||
.Fl FP
|
||||
on the command line achieves the same functionality.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li spddump
|
||||
.Li ;
|
||||
.Xc
|
||||
Dumps all SPD entries.
|
||||
.Fl DP
|
||||
on the command line achieves the same functionality.
|
||||
.El
|
||||
.\"
|
||||
.Pp
|
||||
@ -196,13 +219,23 @@ Meta-arguments are as follows:
|
||||
.It Ar dst
|
||||
Source/destination of the secure communication is specified as
|
||||
IPv4/v6 address.
|
||||
The
|
||||
.Nm
|
||||
utility does not consult hostname-to-address for arguments
|
||||
.Ar src
|
||||
can resolve a FQDN into numeric addresses.
|
||||
If the FQDN resolves into multiple addresses,
|
||||
.Nm
|
||||
will install multiple SAD/SPD entries into the kernel
|
||||
by trying all possible combinations.
|
||||
.Fl 4 ,
|
||||
.Fl 6
|
||||
and
|
||||
.Ar dst .
|
||||
They must be in numeric form.
|
||||
.Fl n
|
||||
restricts the address resolution of FQDN in certain ways.
|
||||
.Fl 4
|
||||
and
|
||||
.Fl 6
|
||||
restrict results into IPv4/v6 addresses only, respectively.
|
||||
.Fl n
|
||||
avoids FQDN resolution and requires addresses to be numeric addresses.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar protocol
|
||||
@ -210,7 +243,7 @@ They must be in numeric form.
|
||||
is one of following:
|
||||
.Bl -tag -width Fl -compact
|
||||
.It Li esp
|
||||
ESP based on rfc2405
|
||||
ESP based on rfc2406
|
||||
.It Li esp-old
|
||||
ESP based on rfc1827
|
||||
.It Li ah
|
||||
@ -218,21 +251,24 @@ AH based on rfc2402
|
||||
.It Li ah-old
|
||||
AH based on rfc1826
|
||||
.It Li ipcomp
|
||||
IPCOMP
|
||||
IPComp
|
||||
.El
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar spi
|
||||
Security Parameter Index (SPI) for the SAD and the SPD.
|
||||
It must be decimal number or hexadecimal number
|
||||
You cannot use the set of SPI values in the range 0 through 255.
|
||||
(with
|
||||
.Li 0x
|
||||
attached).
|
||||
Security Parameter Index
|
||||
.Pq SPI
|
||||
for the SAD and the SPD.
|
||||
.Ar spi
|
||||
must be a decimal number, or a hexadecimal number with
|
||||
.Dq Li 0x
|
||||
prefix.
|
||||
SPI values between 0 and 255 are reserved for future use by IANA
|
||||
and they cannot be used.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar extensions
|
||||
takes some of the following:
|
||||
take some of the following:
|
||||
.Bl -tag -width Fl -compact
|
||||
.\"
|
||||
.It Fl m Ar mode
|
||||
@ -283,62 +319,41 @@ Specify hard/soft life time duration of the SA.
|
||||
.It Ar algorithm
|
||||
.Bl -tag -width Fl -compact
|
||||
.It Fl E Ar ealgo Ar key
|
||||
Specify an encryption algorithm.
|
||||
Specify an encryption algorithm
|
||||
.Ar ealgo
|
||||
for ESP.
|
||||
.It Xo
|
||||
.Fl E Ar ealgo Ar key
|
||||
.Fl A Ar aalgo Ar key
|
||||
.Xc
|
||||
Specify a encryption algorithm
|
||||
.Ar ealgo ,
|
||||
as well as a payload authentication algorithm
|
||||
.Ar aalgo ,
|
||||
for ESP.
|
||||
.It Fl A Ar aalgo Ar key
|
||||
Specify an authentication algorithm.
|
||||
If
|
||||
.Fl A
|
||||
is used with
|
||||
.Ar protocol Li esp ,
|
||||
it will be treated as ESP payload authentication algorithm.
|
||||
Specify an authentication algorithm for AH.
|
||||
.It Fl C Ar calgo Op Fl R
|
||||
Specify compression algorithm.
|
||||
Specify a compression algorithm for IPComp.
|
||||
If
|
||||
.Fl R
|
||||
is not specified with
|
||||
.Li ipcomp
|
||||
line, the kernel will use well-known IPComp CPI
|
||||
(compression parameter index)
|
||||
on IPComp CPI field on packets, and
|
||||
is specified,
|
||||
.Ar spi
|
||||
field will be ignored.
|
||||
.Ar spi
|
||||
field is only for kernel internal use in this case.
|
||||
.\"Therefore, compression protocol number will appear on IPComp CPI field.
|
||||
field value will be used as the IPComp CPI
|
||||
.Pq compression parameter index
|
||||
on wire as is.
|
||||
If
|
||||
.Fl R
|
||||
is used,
|
||||
the value on
|
||||
is not specified,
|
||||
the kernel will use well-known CPI on wire, and
|
||||
.Ar spi
|
||||
field will appear on IPComp CPI field on outgoing packets.
|
||||
.Ar spi
|
||||
field needs to be smaller than
|
||||
.Li 0x10000
|
||||
in this case.
|
||||
field will be used only as an index for kernel internal usage.
|
||||
.El
|
||||
.Pp
|
||||
.Ar protocol Li esp
|
||||
accepts
|
||||
.Fl E
|
||||
and
|
||||
.Fl A .
|
||||
.Ar protocol Li esp-old
|
||||
accepts
|
||||
.Fl E
|
||||
only.
|
||||
.Ar protocol Li ah
|
||||
and
|
||||
.Li ah-old
|
||||
accept
|
||||
.Fl A
|
||||
only.
|
||||
.Ar protocol Li ipcomp
|
||||
accepts
|
||||
.Fl C
|
||||
only.
|
||||
.Pp
|
||||
.Ar key
|
||||
must be double-quoted character string or series of hexadecimal digits.
|
||||
must be double-quoted character string, or a series of hexadecimal digits
|
||||
preceded by
|
||||
.Dq Li 0x .
|
||||
.Pp
|
||||
Possible values for
|
||||
.Ar ealgo ,
|
||||
@ -369,14 +384,11 @@ The square bracket around
|
||||
.Ar port
|
||||
is really necessary.
|
||||
They are not manpage metacharacters.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
utility does not consult hostname-to-address for arguments
|
||||
For FQDN resolution, the rules applicable to
|
||||
.Ar src
|
||||
and
|
||||
.Ar dst .
|
||||
They must be in numeric form.
|
||||
.Ar dst
|
||||
apply here as well.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar upperspec
|
||||
@ -395,34 +407,38 @@ can be specified.
|
||||
stands for
|
||||
.Dq any protocol .
|
||||
Also you can use the protocol number.
|
||||
You can specify a type and/or a code of ICMPv6 when
|
||||
Upper-layer protocol is ICMPv6.
|
||||
the specification can be placed after
|
||||
.Li icmp6 .
|
||||
A type is separated with a code by single comma.
|
||||
A code must be specified anytime.
|
||||
When a zero is specified, the kernel deals with it as a wildcard.
|
||||
Note that the kernel can not distinguish a wildcard from that a type
|
||||
of ICMPv6 is zero.
|
||||
For example, the following means the policy doesn't require IPsec
|
||||
for any inbound Neighbor Solicitation.
|
||||
.Dl spdadd ::/0 ::/0 icmp6 135,0 -P in none ;
|
||||
.Pp
|
||||
NOTE:
|
||||
.Ar upperspec
|
||||
does not work against forwarding case at this moment,
|
||||
as it requires extra reassembly at forwarding node
|
||||
(not implemented at this moment).
|
||||
.Pq not implemented at this moment .
|
||||
We have many protocols in
|
||||
.Pa /etc/protocols ,
|
||||
but protocols except of TCP, UDP and ICMP may not be suitable to use with IPsec.
|
||||
You have to consider and be careful to use them.
|
||||
.Li icmp
|
||||
.Li tcp
|
||||
.Li udp
|
||||
all protocols
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar policy
|
||||
.Ar policy
|
||||
is the one of following:
|
||||
.Bd -literal -offset
|
||||
.Xo
|
||||
.Fl P Ar direction Li discard
|
||||
.Xc
|
||||
.Xo
|
||||
.Fl P Ar direction Li none
|
||||
.Xc
|
||||
.Xo
|
||||
.Fl P Ar direction Li ipsec Ar protocol/mode/src-dst/level
|
||||
is the one of the following three formats:
|
||||
.Bd -literal -offset indent
|
||||
.It Fl P Ar direction Li discard
|
||||
.It Fl P Ar direction Li none
|
||||
.It Xo Fl P Ar direction Li ipsec
|
||||
.Ar protocol/mode/src-dst/level Op ...
|
||||
.Xc
|
||||
.Ed
|
||||
.Pp
|
||||
@ -439,6 +455,9 @@ means the packet matching indexes will be discarded.
|
||||
means that IPsec operation will not take place onto the packet.
|
||||
.Li ipsec
|
||||
means that IPsec operation will take place onto the packet.
|
||||
The part of
|
||||
.Ar protocol/mode/src-dst/level
|
||||
specifies the rule how to process the packet.
|
||||
Either
|
||||
.Li ah ,
|
||||
.Li esp
|
||||
@ -480,7 +499,7 @@ If the SA is not available in every level, the kernel will request
|
||||
getting SA to the key exchange daemon.
|
||||
.Li default
|
||||
means the kernel consults to the system wide default against protocol you
|
||||
specified, e.g.\&
|
||||
specified, e.g.
|
||||
.Li esp_trans_deflev
|
||||
sysctl variable, when the kernel processes the packet.
|
||||
.Li use
|
||||
@ -492,17 +511,29 @@ with the policy.
|
||||
.Li unique
|
||||
is the same to require.
|
||||
In addition, it allows the policy to bind with the unique out-bound SA.
|
||||
If you use the SA by manual keying,
|
||||
You just specify the policy level
|
||||
.Li unique ,
|
||||
.Xr racoon 8
|
||||
will configure the SA for the policy.
|
||||
If you configure the SA by manual keying for that policy,
|
||||
you can put the decimal number as the policy identifier after
|
||||
.Li unique
|
||||
separated by colon
|
||||
.Sq \:
|
||||
.Sq \&:
|
||||
like the following;
|
||||
.Li unique:number .
|
||||
in order to bind this policy to the SA.
|
||||
.Li number
|
||||
must be between 1 and 32767.
|
||||
It corresponds to
|
||||
.Ar extensions Fl u .
|
||||
.Ar extensions Fl u
|
||||
of the manual SA configuration.
|
||||
When you want to use SA bundle, you can define multiple rules.
|
||||
For example, if an IP header was followed by AH header followed by ESP header
|
||||
followed by an upper layer protocol header, the rule
|
||||
would be:
|
||||
.Dl esp/transport//require ah/transport//require ;
|
||||
The rule order is very important.
|
||||
.Pp
|
||||
Note that
|
||||
.Dq Li discard
|
||||
@ -543,7 +574,8 @@ keyed-md5 128 ah: 96bit ICV (no document)
|
||||
keyed-sha1 160 ah: 96bit ICV (no document)
|
||||
160 ah-old: 128bit ICV (no document)
|
||||
null 0 to 2048 for debugging
|
||||
hmac-sha2-256 256 ah: 96bit ICV (no document)
|
||||
hmac-sha2-256 256 ah: 96bit ICV
|
||||
(draft-ietf-ipsec-ciph-sha-256-00)
|
||||
256 ah-old: 128bit ICV (no document)
|
||||
hmac-sha2-384 384 ah: 96bit ICV (no document)
|
||||
384 ah-old: 128bit ICV (no document)
|
||||
@ -551,8 +583,8 @@ hmac-sha2-512 512 ah: 96bit ICV (no document)
|
||||
512 ah-old: 128bit ICV (no document)
|
||||
hmac-ripemd160 160 ah: 96bit ICV (RFC2857)
|
||||
ah-old: 128bit ICV (no document)
|
||||
aes-xcbc-mac 128 ah: 96bit ICV (RFC3566)
|
||||
128 ah-old: 128bit ICV (no document)
|
||||
.\"aes-xcbc-mac 128 ah: 96bit ICV (RFC3566)
|
||||
.\" 128 ah-old: 128bit ICV (no document)
|
||||
.Ed
|
||||
.Pp
|
||||
Followings are the list of encryption algorithms that can be used as
|
||||
@ -567,13 +599,13 @@ parameter:
|
||||
algorithm keylen (bits) comment
|
||||
des-cbc 64 esp-old: rfc1829, esp: rfc2405
|
||||
3des-cbc 192 rfc2451
|
||||
simple 0 to 2048 rfc2410
|
||||
null 0 to 2048 rfc2410
|
||||
blowfish-cbc 40 to 448 rfc2451
|
||||
cast128-cbc 40 to 128 rfc2451
|
||||
des-deriv 64 ipsec-ciph-des-derived-01 (expired)
|
||||
des-deriv 64 ipsec-ciph-des-derived-01
|
||||
3des-deriv 192 no document
|
||||
rijndael-cbc 128/192/256 draft-ietf-ipsec-ciph-aes-cbc-00
|
||||
aes-ctr 160/224/288 draft-ietf-ipsec-ciph-aes-ctr-03
|
||||
rijndael-cbc 128/192/256 rfc3602
|
||||
.\"aes-ctr 160/224/288 draft-ietf-ipsec-ciph-aes-ctr-03
|
||||
.Ed
|
||||
.Pp
|
||||
Note that the first 128 bits of a key for
|
||||
@ -591,44 +623,58 @@ parameter:
|
||||
.Bd -literal -offset indent
|
||||
algorithm comment
|
||||
deflate rfc2394
|
||||
lzs rfc2395
|
||||
.Ed
|
||||
.\"
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal -offset
|
||||
add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
|
||||
-E des-cbc "ESP SA!!" ;
|
||||
|
||||
add 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456
|
||||
-A hmac-sha1 "AH SA configuration!" ;
|
||||
|
||||
add 10.0.11.41 10.0.11.33 esp 0x10001
|
||||
-E des-cbc "ESP with"
|
||||
-A hmac-md5 "authentication!!" ;
|
||||
|
||||
get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;
|
||||
|
||||
flush ;
|
||||
|
||||
dump esp ;
|
||||
|
||||
spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any
|
||||
-P out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ;
|
||||
|
||||
.Ed
|
||||
.\"
|
||||
.Sh RETURN VALUES
|
||||
The command exits with 0 on success, and non-zero on errors.
|
||||
.\"
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal -offset
|
||||
add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
|
||||
-E des-cbc 0x3ffe05014819ffff ;
|
||||
|
||||
add -6 myhost.example.com yourhost.example.com ah 123456
|
||||
-A hmac-sha1 "AH SA configuration!" ;
|
||||
|
||||
add 10.0.11.41 10.0.11.33 esp 0x10001
|
||||
-E des-cbc 0x3ffe05014819ffff
|
||||
-A hmac-md5 "authentication!!" ;
|
||||
|
||||
get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;
|
||||
|
||||
flush ;
|
||||
|
||||
dump esp ;
|
||||
|
||||
spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any
|
||||
-P out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ;
|
||||
|
||||
.Ed
|
||||
.\"
|
||||
.Sh SEE ALSO
|
||||
.Xr ipsec_set_policy 3 ,
|
||||
.Xr racoon 8 ,
|
||||
.Xr sysctl 8
|
||||
.Rs
|
||||
.%T "Changed manual key configuration for IPsec"
|
||||
.%O "http://www.kame.net/newsletter/19991007/"
|
||||
.%D "October 1999"
|
||||
.Re
|
||||
.\"
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
utility first appeared in WIDE Hydrangea IPv6 protocol stack kit.
|
||||
command first appeared in WIDE Hydrangea IPv6 protocol stack kit.
|
||||
The command was completely re-designed in June 1998.
|
||||
.\"
|
||||
.\" .Sh BUGS
|
||||
.Sh BUGS
|
||||
.Nm
|
||||
should report and handle syntax errors better.
|
||||
.Pp
|
||||
For IPsec gateway configuration,
|
||||
.Ar src_range
|
||||
and
|
||||
.Ar dst_range
|
||||
with TCP/UDP port number do not work, as the gateway does not reassemble
|
||||
packets
|
||||
.Pq cannot inspect upper-layer headers .
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
/* $KAME: setkey.c,v 1.18 2001/05/08 04:36:39 itojun Exp $ */
|
||||
/* $KAME: setkey.c,v 1.28 2003/06/27 07:15:45 itojun Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
|
||||
@ -58,7 +58,7 @@ int main __P((int, char **));
|
||||
int get_supported __P((void));
|
||||
void sendkeyshort __P((u_int));
|
||||
void promisc __P((void));
|
||||
int sendkeymsg __P((void));
|
||||
int sendkeymsg __P((char *, size_t));
|
||||
int postproc __P((struct sadb_msg *, int));
|
||||
const char *numstr __P((int));
|
||||
void shortdump_hdr __P((void));
|
||||
@ -75,18 +75,12 @@ int so;
|
||||
|
||||
int f_forever = 0;
|
||||
int f_all = 0;
|
||||
int f_debug = 0;
|
||||
int f_verbose = 0;
|
||||
int f_mode = 0;
|
||||
int f_cmddump = 0;
|
||||
int f_policy = 0;
|
||||
int f_hexdump = 0;
|
||||
int f_tflag = 0;
|
||||
char *pname;
|
||||
|
||||
u_char m_buf[BUFSIZ];
|
||||
u_int m_len;
|
||||
|
||||
static time_t thiszone;
|
||||
|
||||
extern int lineno;
|
||||
@ -96,12 +90,12 @@ extern int parse __P((FILE **));
|
||||
void
|
||||
usage()
|
||||
{
|
||||
printf("usage:\t%s [-dv] -c\n", pname);
|
||||
printf("\t%s [-dv] -f (file)\n", pname);
|
||||
printf("\t%s [-Padlv] -D\n", pname);
|
||||
printf("\t%s [-Pdv] -F\n", pname);
|
||||
printf("\t%s [-h] -x\n", pname);
|
||||
pfkey_close(so);
|
||||
|
||||
printf("usage: setkey [-v] -c\n");
|
||||
printf(" setkey [-v] -f filename\n");
|
||||
printf(" setkey [-Palv] -D\n");
|
||||
printf(" setkey [-Pv] -F\n");
|
||||
printf(" setkey [-h] -x\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -113,8 +107,6 @@ main(ac, av)
|
||||
FILE *fp = stdin;
|
||||
int c;
|
||||
|
||||
pname = *av;
|
||||
|
||||
if (ac == 1) {
|
||||
usage();
|
||||
/* NOTREACHED */
|
||||
@ -157,9 +149,6 @@ main(ac, av)
|
||||
case 'P':
|
||||
f_policy = 1;
|
||||
break;
|
||||
case 'd':
|
||||
f_debug = 1;
|
||||
break;
|
||||
case 'v':
|
||||
f_verbose = 1;
|
||||
break;
|
||||
@ -169,13 +158,18 @@ main(ac, av)
|
||||
}
|
||||
}
|
||||
|
||||
so = pfkey_open();
|
||||
if (so < 0) {
|
||||
perror("pfkey_open");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
switch (f_mode) {
|
||||
case MODE_CMDDUMP:
|
||||
sendkeyshort(f_policy ? SADB_X_SPDDUMP: SADB_DUMP);
|
||||
break;
|
||||
case MODE_CMDFLUSH:
|
||||
sendkeyshort(f_policy ? SADB_X_SPDFLUSH: SADB_FLUSH);
|
||||
pfkey_close(so);
|
||||
break;
|
||||
case MODE_SCRIPT:
|
||||
if (get_supported() < 0) {
|
||||
@ -199,16 +193,6 @@ main(ac, av)
|
||||
int
|
||||
get_supported()
|
||||
{
|
||||
int so;
|
||||
|
||||
if ((so = pfkey_open()) < 0) {
|
||||
perror("pfkey_open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* debug mode ? */
|
||||
if (f_debug)
|
||||
return 0;
|
||||
|
||||
if (pfkey_send_register(so, SADB_SATYPE_UNSPEC) < 0)
|
||||
return -1;
|
||||
@ -223,20 +207,18 @@ void
|
||||
sendkeyshort(type)
|
||||
u_int type;
|
||||
{
|
||||
struct sadb_msg *m_msg = (struct sadb_msg *)m_buf;
|
||||
struct sadb_msg msg;
|
||||
|
||||
m_len = sizeof(struct sadb_msg);
|
||||
msg.sadb_msg_version = PF_KEY_V2;
|
||||
msg.sadb_msg_type = type;
|
||||
msg.sadb_msg_errno = 0;
|
||||
msg.sadb_msg_satype = SADB_SATYPE_UNSPEC;
|
||||
msg.sadb_msg_len = PFKEY_UNIT64(sizeof(msg));
|
||||
msg.sadb_msg_reserved = 0;
|
||||
msg.sadb_msg_seq = 0;
|
||||
msg.sadb_msg_pid = getpid();
|
||||
|
||||
m_msg->sadb_msg_version = PF_KEY_V2;
|
||||
m_msg->sadb_msg_type = type;
|
||||
m_msg->sadb_msg_errno = 0;
|
||||
m_msg->sadb_msg_satype = SADB_SATYPE_UNSPEC;
|
||||
m_msg->sadb_msg_len = PFKEY_UNIT64(m_len);
|
||||
m_msg->sadb_msg_reserved = 0;
|
||||
m_msg->sadb_msg_seq = 0;
|
||||
m_msg->sadb_msg_pid = getpid();
|
||||
|
||||
sendkeymsg();
|
||||
sendkeymsg((char *)&msg, sizeof(msg));
|
||||
|
||||
return;
|
||||
}
|
||||
@ -244,27 +226,20 @@ sendkeyshort(type)
|
||||
void
|
||||
promisc()
|
||||
{
|
||||
struct sadb_msg *m_msg = (struct sadb_msg *)m_buf;
|
||||
struct sadb_msg msg;
|
||||
u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
|
||||
int so, l;
|
||||
ssize_t l;
|
||||
|
||||
m_len = sizeof(struct sadb_msg);
|
||||
msg.sadb_msg_version = PF_KEY_V2;
|
||||
msg.sadb_msg_type = SADB_X_PROMISC;
|
||||
msg.sadb_msg_errno = 0;
|
||||
msg.sadb_msg_satype = 1;
|
||||
msg.sadb_msg_len = PFKEY_UNIT64(sizeof(msg));
|
||||
msg.sadb_msg_reserved = 0;
|
||||
msg.sadb_msg_seq = 0;
|
||||
msg.sadb_msg_pid = getpid();
|
||||
|
||||
m_msg->sadb_msg_version = PF_KEY_V2;
|
||||
m_msg->sadb_msg_type = SADB_X_PROMISC;
|
||||
m_msg->sadb_msg_errno = 0;
|
||||
m_msg->sadb_msg_satype = 1;
|
||||
m_msg->sadb_msg_len = PFKEY_UNIT64(m_len);
|
||||
m_msg->sadb_msg_reserved = 0;
|
||||
m_msg->sadb_msg_seq = 0;
|
||||
m_msg->sadb_msg_pid = getpid();
|
||||
|
||||
if ((so = socket(PF_KEY, SOCK_RAW, PF_KEY_V2)) < 0) {
|
||||
err(1, "socket(PF_KEY)");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
if ((l = send(so, m_buf, m_len, 0)) < 0) {
|
||||
if ((l = send(so, &msg, sizeof(msg), 0)) < 0) {
|
||||
err(1, "send");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@ -301,7 +276,7 @@ promisc()
|
||||
}
|
||||
/* adjust base pointer for promisc mode */
|
||||
if (base->sadb_msg_type == SADB_X_PROMISC) {
|
||||
if (sizeof(*base) < l)
|
||||
if ((ssize_t)sizeof(*base) < l)
|
||||
base++;
|
||||
else
|
||||
base = NULL;
|
||||
@ -315,19 +290,14 @@ promisc()
|
||||
}
|
||||
|
||||
int
|
||||
sendkeymsg()
|
||||
sendkeymsg(buf, len)
|
||||
char *buf;
|
||||
size_t len;
|
||||
{
|
||||
int so;
|
||||
|
||||
u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
|
||||
int l;
|
||||
ssize_t l;
|
||||
struct sadb_msg *msg;
|
||||
|
||||
if ((so = pfkey_open()) < 0) {
|
||||
perror("pfkey_open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
{
|
||||
struct timeval tv;
|
||||
tv.tv_sec = 1;
|
||||
@ -342,11 +312,23 @@ sendkeymsg()
|
||||
shortdump_hdr();
|
||||
again:
|
||||
if (f_verbose) {
|
||||
kdebug_sadb((struct sadb_msg *)m_buf);
|
||||
kdebug_sadb((struct sadb_msg *)buf);
|
||||
printf("\n");
|
||||
}
|
||||
if (f_hexdump) {
|
||||
int i;
|
||||
for (i = 0; i < len; i++) {
|
||||
if (i % 16 == 0)
|
||||
printf("%08x: ", i);
|
||||
printf("%02x ", buf[i] & 0xff);
|
||||
if (i % 16 == 15)
|
||||
printf("\n");
|
||||
}
|
||||
if (len % 16)
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if ((l = send(so, m_buf, m_len, 0)) < 0) {
|
||||
if ((l = send(so, buf, len, 0)) < 0) {
|
||||
perror("send");
|
||||
goto end;
|
||||
}
|
||||
@ -378,7 +360,6 @@ sendkeymsg()
|
||||
}
|
||||
|
||||
end:
|
||||
pfkey_close(so);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
/* $KAME: token.l,v 1.21 2001/05/18 05:35:01 sakane Exp $ */
|
||||
/* $KAME: token.l,v 1.43 2003/07/25 09:35:28 itojun Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
|
||||
@ -46,30 +46,12 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include "vchar.h"
|
||||
#ifdef __NetBSD__
|
||||
#include "parse.h"
|
||||
#else
|
||||
#include "y.tab.h"
|
||||
#endif
|
||||
|
||||
#define DECHO \
|
||||
if (f_debug) {printf("<%d>", yy_start); ECHO ; printf("\n"); }
|
||||
|
||||
#define CMDARG \
|
||||
{ \
|
||||
char *__buf__ = strdup(yytext), *__p__; \
|
||||
for (__p__ = __buf__; *__p__ != NULL; __p__++) \
|
||||
if (*__p__ == '\n' || *__p__ == '\t') \
|
||||
*__p__ = ' '; \
|
||||
strcat(cmdarg, __buf__); \
|
||||
free(__buf__); \
|
||||
}
|
||||
|
||||
#define PREPROC DECHO CMDARG
|
||||
|
||||
int lineno = 1;
|
||||
char cmdarg[8192]; /* XXX: BUFSIZ is the better ? */
|
||||
|
||||
extern u_char m_buf[BUFSIZ];
|
||||
extern u_int m_len;
|
||||
@ -81,7 +63,6 @@ void yyerror __P((const char *s));
|
||||
extern void parse_init __P((void));
|
||||
int parse __P((FILE **));
|
||||
int yyparse __P((void));
|
||||
|
||||
%}
|
||||
|
||||
/* common section */
|
||||
@ -90,199 +71,177 @@ ws [ \t]+
|
||||
digit [0-9]
|
||||
letter [0-9A-Za-z]
|
||||
hexdigit [0-9A-Fa-f]
|
||||
/*octet (([01]?{digit}?{digit})|((2([0-4]{digit}))|(25[0-5])))*/
|
||||
special [()+\|\?\*,]
|
||||
dot \.
|
||||
comma \,
|
||||
hyphen \-
|
||||
colon \:
|
||||
slash \/
|
||||
bcl \{
|
||||
ecl \}
|
||||
blcl \[
|
||||
elcl \]
|
||||
percent \%
|
||||
semi \;
|
||||
usec {dot}{digit}{1,6}
|
||||
comment \#.*
|
||||
ccomment "/*"
|
||||
bracketstring \<[^>]*\>
|
||||
quotedstring \"[^"]*\"
|
||||
decstring {digit}+
|
||||
hexpair {hexdigit}{hexdigit}
|
||||
hexstring 0[xX]{hexdigit}+
|
||||
octetstring {octet}({dot}{octet})+
|
||||
ipaddress [a-fA-F0-9:]([a-fA-F0-9:\.]*|[a-fA-F0-9:\.]*%[a-zA-Z0-9]*)
|
||||
ipaddrmask {slash}{digit}{1,3}
|
||||
ipaddrport {blcl}{decstring}{elcl}
|
||||
keyword {letter}{letter}+
|
||||
name {letter}(({letter}|{digit}|{hyphen})*({letter}|{digit}))*
|
||||
hostname {name}(({dot}{name})+{dot}?)?
|
||||
|
||||
%s S_PL
|
||||
%s S_PL S_AUTHALG S_ENCALG
|
||||
|
||||
%%
|
||||
|
||||
add { PREPROC; return(ADD); }
|
||||
delete { PREPROC; return(DELETE); }
|
||||
deleteall { PREPROC; return(DELETEALL); }
|
||||
get { PREPROC; return(GET); }
|
||||
flush { PREPROC; return(FLUSH); }
|
||||
dump { PREPROC; return(DUMP); }
|
||||
add { return(ADD); }
|
||||
delete { return(DELETE); }
|
||||
deleteall { return(DELETEALL); }
|
||||
get { return(GET); }
|
||||
flush { return(FLUSH); }
|
||||
dump { return(DUMP); }
|
||||
|
||||
/* for management SPD */
|
||||
spdadd { PREPROC; return(SPDADD); }
|
||||
spddelete { PREPROC; return(SPDDELETE); }
|
||||
spddump { PREPROC; return(SPDDUMP); }
|
||||
spdflush { PREPROC; return(SPDFLUSH); }
|
||||
{hyphen}P { BEGIN S_PL; PREPROC; return(F_POLICY); }
|
||||
<S_PL>[a-zA-Z0-9:\.\-_/ \n\t][a-zA-Z0-9:\.\-_/ \n\t]* {
|
||||
yymore();
|
||||
spdadd { return(SPDADD); }
|
||||
spddelete { return(SPDDELETE); }
|
||||
spddump { return(SPDDUMP); }
|
||||
spdflush { return(SPDFLUSH); }
|
||||
tagged { return(TAGGED); }
|
||||
{hyphen}P { BEGIN S_PL; return(F_POLICY); }
|
||||
<S_PL>[a-zA-Z0-9:\.\-_/ \n\t][a-zA-Z0-9:\.%\-_/ \n\t]* {
|
||||
yymore();
|
||||
|
||||
/* count up for nl */
|
||||
{
|
||||
char *p;
|
||||
for (p = yytext; *p != NULL; p++)
|
||||
if (*p == '\n')
|
||||
lineno++;
|
||||
}
|
||||
/* count up for nl */
|
||||
{
|
||||
char *p;
|
||||
for (p = yytext; *p != NULL; p++)
|
||||
if (*p == '\n')
|
||||
lineno++;
|
||||
}
|
||||
|
||||
yylval.val.len = strlen(yytext);
|
||||
yylval.val.buf = strdup(yytext);
|
||||
yylval.val.len = strlen(yytext);
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
|
||||
return(PL_REQUESTS);
|
||||
}
|
||||
<S_PL>{semi} { PREPROC; BEGIN INITIAL; return(EOT); }
|
||||
return(PL_REQUESTS);
|
||||
}
|
||||
<S_PL>{semi} { BEGIN INITIAL; return(EOT); }
|
||||
|
||||
/* address resolution flags */
|
||||
{hyphen}[n46][n46]* {
|
||||
yylval.val.len = strlen(yytext);
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
return(F_AIFLAGS);
|
||||
}
|
||||
|
||||
/* security protocols */
|
||||
ah { PREPROC; yylval.num = 0; return(PR_AH); }
|
||||
esp { PREPROC; yylval.num = 0; return(PR_ESP); }
|
||||
ah-old { PREPROC; yylval.num = 1; return(PR_AH); }
|
||||
esp-old { PREPROC; yylval.num = 1; return(PR_ESP); }
|
||||
ipcomp { PREPROC; yylval.num = 0; return(PR_IPCOMP); }
|
||||
ah { yylval.num = 0; return(PR_AH); }
|
||||
esp { yylval.num = 0; return(PR_ESP); }
|
||||
ah-old { yylval.num = 1; return(PR_AH); }
|
||||
esp-old { yylval.num = 1; return(PR_ESP); }
|
||||
ipcomp { yylval.num = 0; return(PR_IPCOMP); }
|
||||
|
||||
/* authentication alogorithm */
|
||||
{hyphen}A { PREPROC; return(F_AUTH); }
|
||||
hmac-md5 { PREPROC; yylval.num = SADB_AALG_MD5HMAC; return(ALG_AUTH); }
|
||||
hmac-sha1 { PREPROC; yylval.num = SADB_AALG_SHA1HMAC; return(ALG_AUTH); }
|
||||
keyed-md5 { PREPROC; yylval.num = SADB_X_AALG_MD5; return(ALG_AUTH); }
|
||||
keyed-sha1 { PREPROC; yylval.num = SADB_X_AALG_SHA; return(ALG_AUTH); }
|
||||
hmac-sha2-256 { PREPROC; yylval.num = SADB_X_AALG_SHA2_256; return(ALG_AUTH); }
|
||||
hmac-sha2-384 { PREPROC; yylval.num = SADB_X_AALG_SHA2_384; return(ALG_AUTH); }
|
||||
hmac-sha2-512 { PREPROC; yylval.num = SADB_X_AALG_SHA2_512; return(ALG_AUTH); }
|
||||
hmac-ripemd160 { PREPROC; yylval.num = SADB_X_AALG_RIPEMD160HMAC; return(ALG_AUTH); }
|
||||
aes-xcbc-mac { PREPROC; yylval.num = SADB_X_AALG_AES_XCBC_MAC; return(ALG_AUTH); }
|
||||
null { PREPROC; yylval.num = SADB_X_AALG_NULL; return(ALG_AUTH); }
|
||||
{hyphen}A { BEGIN S_AUTHALG; return(F_AUTH); }
|
||||
<S_AUTHALG>hmac-md5 { yylval.num = SADB_AALG_MD5HMAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha1 { yylval.num = SADB_AALG_SHA1HMAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>keyed-md5 { yylval.num = SADB_X_AALG_MD5; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>keyed-sha1 { yylval.num = SADB_X_AALG_SHA; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha2-256 { yylval.num = SADB_X_AALG_SHA2_256; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha2-384 { yylval.num = SADB_X_AALG_SHA2_384; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha2-512 { yylval.num = SADB_X_AALG_SHA2_512; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-ripemd160 { yylval.num = SADB_X_AALG_RIPEMD160HMAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>aes-xcbc-mac { yylval.num = SADB_X_AALG_AES_XCBC_MAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>null { yylval.num = SADB_X_AALG_NULL; BEGIN INITIAL; return(ALG_AUTH_NOKEY); }
|
||||
|
||||
/* encryption alogorithm */
|
||||
{hyphen}E { PREPROC; return(F_ENC); }
|
||||
des-cbc { PREPROC; yylval.num = SADB_EALG_DESCBC; return(ALG_ENC); }
|
||||
3des-cbc { PREPROC; yylval.num = SADB_EALG_3DESCBC; return(ALG_ENC); }
|
||||
simple { PREPROC; yylval.num = SADB_EALG_NULL; return(ALG_ENC); }
|
||||
blowfish-cbc { PREPROC; yylval.num = SADB_X_EALG_BLOWFISHCBC; return(ALG_ENC); }
|
||||
cast128-cbc { PREPROC; yylval.num = SADB_X_EALG_CAST128CBC; return(ALG_ENC); }
|
||||
des-deriv { PREPROC; yylval.num = SADB_EALG_DESCBC; return(ALG_ENC_DESDERIV); }
|
||||
des-32iv { PREPROC; yylval.num = SADB_EALG_DESCBC; return(ALG_ENC_DES32IV); }
|
||||
rijndael-cbc { PREPROC; yylval.num = SADB_X_EALG_RIJNDAELCBC; return(ALG_ENC); }
|
||||
aes-ctr { PREPROC; yylval.num = SADB_X_EALG_AESCTR; return(ALG_ENC); }
|
||||
{hyphen}E { BEGIN S_ENCALG; return(F_ENC); }
|
||||
<S_ENCALG>des-cbc { yylval.num = SADB_EALG_DESCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>3des-cbc { yylval.num = SADB_EALG_3DESCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>null { yylval.num = SADB_EALG_NULL; BEGIN INITIAL; return(ALG_ENC_NOKEY); }
|
||||
<S_ENCALG>simple { yylval.num = SADB_EALG_NULL; BEGIN INITIAL; return(ALG_ENC_OLD); }
|
||||
<S_ENCALG>blowfish-cbc { yylval.num = SADB_X_EALG_BLOWFISHCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>cast128-cbc { yylval.num = SADB_X_EALG_CAST128CBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>des-deriv { yylval.num = SADB_EALG_DESCBC; BEGIN INITIAL; return(ALG_ENC_DESDERIV); }
|
||||
<S_ENCALG>des-32iv { yylval.num = SADB_EALG_DESCBC; BEGIN INITIAL; return(ALG_ENC_DES32IV); }
|
||||
<S_ENCALG>rijndael-cbc { yylval.num = SADB_X_EALG_RIJNDAELCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>aes-ctr { yylval.num = SADB_X_EALG_AESCTR; BEGIN INITIAL; return(ALG_ENC); }
|
||||
|
||||
/* compression algorithms */
|
||||
{hyphen}C { PREPROC; return(F_COMP); }
|
||||
oui { PREPROC; yylval.num = SADB_X_CALG_OUI; return(ALG_COMP); }
|
||||
deflate { PREPROC; yylval.num = SADB_X_CALG_DEFLATE; return(ALG_COMP); }
|
||||
lzs { PREPROC; yylval.num = SADB_X_CALG_LZS; return(ALG_COMP); }
|
||||
{hyphen}R { PREPROC; return(F_RAWCPI); }
|
||||
{hyphen}C { return(F_COMP); }
|
||||
oui { yylval.num = SADB_X_CALG_OUI; return(ALG_COMP); }
|
||||
deflate { yylval.num = SADB_X_CALG_DEFLATE; return(ALG_COMP); }
|
||||
lzs { yylval.num = SADB_X_CALG_LZS; return(ALG_COMP); }
|
||||
{hyphen}R { return(F_RAWCPI); }
|
||||
|
||||
/* extension */
|
||||
{hyphen}m { PREPROC; return(F_MODE); }
|
||||
transport { PREPROC; yylval.num = IPSEC_MODE_TRANSPORT; return(MODE); }
|
||||
tunnel { PREPROC; yylval.num = IPSEC_MODE_TUNNEL; return(MODE); }
|
||||
{hyphen}u { PREPROC; return(F_REQID); }
|
||||
{hyphen}f { PREPROC; return(F_EXT); }
|
||||
random-pad { PREPROC; yylval.num = SADB_X_EXT_PRAND; return(EXTENSION); }
|
||||
seq-pad { PREPROC; yylval.num = SADB_X_EXT_PSEQ; return(EXTENSION); }
|
||||
zero-pad { PREPROC; yylval.num = SADB_X_EXT_PZERO; return(EXTENSION); }
|
||||
nocyclic-seq { PREPROC; return(NOCYCLICSEQ); }
|
||||
{hyphen}r { PREPROC; return(F_REPLAY); }
|
||||
{hyphen}lh { PREPROC; return(F_LIFETIME_HARD); }
|
||||
{hyphen}ls { PREPROC; return(F_LIFETIME_SOFT); }
|
||||
{hyphen}m { return(F_MODE); }
|
||||
transport { yylval.num = IPSEC_MODE_TRANSPORT; return(MODE); }
|
||||
tunnel { yylval.num = IPSEC_MODE_TUNNEL; return(MODE); }
|
||||
{hyphen}u { return(F_REQID); }
|
||||
{hyphen}f { return(F_EXT); }
|
||||
random-pad { yylval.num = SADB_X_EXT_PRAND; return(EXTENSION); }
|
||||
seq-pad { yylval.num = SADB_X_EXT_PSEQ; return(EXTENSION); }
|
||||
zero-pad { yylval.num = SADB_X_EXT_PZERO; return(EXTENSION); }
|
||||
nocyclic-seq { return(NOCYCLICSEQ); }
|
||||
{hyphen}r { return(F_REPLAY); }
|
||||
{hyphen}lh { return(F_LIFETIME_HARD); }
|
||||
{hyphen}ls { return(F_LIFETIME_SOFT); }
|
||||
|
||||
/* ... */
|
||||
any { PREPROC; return(ANY); }
|
||||
{ws} { PREPROC; }
|
||||
any { return(ANY); }
|
||||
{ws} { }
|
||||
{nl} { lineno++; }
|
||||
{comment}
|
||||
{semi} { PREPROC; return(EOT); }
|
||||
{semi} { return(EOT); }
|
||||
|
||||
/* for address parameters: /prefix, [port] */
|
||||
{slash} { return SLASH; }
|
||||
{blcl} { return BLCL; }
|
||||
{elcl} { return ELCL; }
|
||||
|
||||
/* parameter */
|
||||
{decstring} {
|
||||
char *bp;
|
||||
|
||||
PREPROC;
|
||||
yylval.num = strtoul(yytext, &bp, 10);
|
||||
yylval.ulnum = strtoul(yytext, &bp, 10);
|
||||
return(DECSTRING);
|
||||
}
|
||||
|
||||
{ipaddress} {
|
||||
PREPROC;
|
||||
|
||||
yylval.val.len = yyleng;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
|
||||
return(ADDRESS);
|
||||
}
|
||||
|
||||
{ipaddrmask} {
|
||||
PREPROC;
|
||||
yytext++;
|
||||
yylval.num = atoi(yytext);
|
||||
return(PREFIX);
|
||||
}
|
||||
|
||||
{ipaddrport} {
|
||||
char *p = yytext;
|
||||
PREPROC;
|
||||
while (*++p != ']') ;
|
||||
*p = NULL;
|
||||
yytext++;
|
||||
yylval.num = atoi(yytext);
|
||||
return(PORT);
|
||||
}
|
||||
|
||||
{blcl}any{elcl} {
|
||||
PREPROC;
|
||||
return(PORTANY);
|
||||
}
|
||||
|
||||
{hexstring} {
|
||||
int len = yyleng - 2; /* (str - "0x") */
|
||||
PREPROC;
|
||||
yylval.val.len = (len & 1) + (len / 2);
|
||||
/* fixed string if length is odd. */
|
||||
if (len & 1) {
|
||||
yytext[1] = '0';
|
||||
yylval.val.buf = strdup(yytext + 1);
|
||||
} else
|
||||
yylval.val.buf = strdup(yytext + 2);
|
||||
yylval.val.buf = strdup(yytext + 2);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
yylval.val.len = strlen(yylval.val.buf);
|
||||
|
||||
return(HEXSTRING);
|
||||
}
|
||||
|
||||
{quotedstring} {
|
||||
char *p = yytext;
|
||||
PREPROC;
|
||||
while (*++p != '"') ;
|
||||
*p = NULL;
|
||||
yytext++;
|
||||
yylval.val.len = yyleng - 2;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
|
||||
return(QUOTEDSTRING);
|
||||
}
|
||||
|
||||
[a-z0-9.\-]* {
|
||||
[A-Za-z0-9:][A-Za-z0-9:%\.-]* {
|
||||
yylval.val.len = yyleng;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
return(STRING);
|
||||
}
|
||||
|
||||
[0-9,]+ {
|
||||
yylval.val.len = yyleng;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
return(STRING);
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ LDADD= -ll -ly
|
||||
|
||||
CLEANFILES= y.tab.c y.tab.h key_test.o keytest
|
||||
|
||||
# libpfkey.
|
||||
# libpfkey
|
||||
# ipsec_strerror.c is for avoiding shlib reference to non-exported function.
|
||||
.PATH: ${.CURDIR}/../../lib/libipsec ${.CURDIR}/../../sys/netkey
|
||||
SRCS+= pfkey.c pfkey_dump.c key_debug.c ipsec_strerror.c
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -45,9 +45,9 @@
|
||||
#
|
||||
# At Host-A and Host-B,
|
||||
spdadd fec0::10[any] fec0::11[110] tcp -P out ipsec
|
||||
esp/transport/fec0::10-fec0::11/use ;
|
||||
esp/transport//use ;
|
||||
spdadd fec0::11[110] fec0::10[any] tcp -P in ipsec
|
||||
esp/transport/fec0::11-fec0::10/use ;
|
||||
esp/transport//use ;
|
||||
add fec0::10 fec0::11 esp 0x10001
|
||||
-m transport
|
||||
-E blowfish-cbc "kamekame"
|
||||
@ -112,10 +112,10 @@ add 172.16.0.2 172.16.0.1 ah-old 0x10004
|
||||
# At Gateway-A:
|
||||
spdadd fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out ipsec
|
||||
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require
|
||||
ah/transport/fec0:0:0:1::1-fec0:0:0:2::1/require ;
|
||||
ah/transport//require ;
|
||||
spdadd fec0:0:0:2::/64 fec0:0:0:1::/64 any -P in ipsec
|
||||
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require
|
||||
ah/transport/fec0:0:0:2::1-fec0:0:0:1::1/require ;
|
||||
ah/transport//require ;
|
||||
add fec0:0:0:1::1 fec0:0:0:2::1 esp 0x10001
|
||||
-m tunnel
|
||||
-E 3des-cbc "kamekame12341234kame1234"
|
||||
@ -146,10 +146,10 @@ add fec0:0:0:2::1 fec0:0:0:1::1 ah 0x10001
|
||||
#
|
||||
# At Host-A:
|
||||
spdadd fec0:0:0:1::1[any] fec0:0:0:2::2[80] tcp -P out ipsec
|
||||
esp/transport/fec0:0:0:1::1-fec0:0:0:2::2/use
|
||||
esp/transport//use
|
||||
esp/tunnel/fec0:0:0:1::1-fec0:0:0:2::1/require ;
|
||||
spdadd fec0:0:0:2::1[80] fec0:0:0:1::1[any] tcp -P in ipsec
|
||||
esp/transport/fec0:0:0:2::2-fec0:0:0:1::1/use
|
||||
esp/transport//use
|
||||
esp/tunnel/fec0:0:0:2::1-fec0:0:0:1::1/require ;
|
||||
add fec0:0:0:1::1 fec0:0:0:2::2 esp 0x10001
|
||||
-m transport
|
||||
@ -166,10 +166,10 @@ add fec0:0:0:2::1 fec0:0:0:1::1 esp 0x10004
|
||||
-E rc5-cbc "kamekame"
|
||||
-A hmac-md5 "this is the test" ;
|
||||
|
||||
# By "get" command, you can get an entry of either SP or SA.
|
||||
# By "get" command, you can get a entry of either SP or SA.
|
||||
get fec0:0:0:1::1 fec0:0:0:2::2 ah 0x10004 ;
|
||||
|
||||
# Also delete command, you can delete an entry of either SP or SA.
|
||||
# Also delete command, you can delete a entry of either SP or SA.
|
||||
spddelete fec0:0:0:1::/64 fec0:0:0:2::/64 any -P out;
|
||||
delete fec0:0:0:1::1 fec0:0:0:2::2 ah 0x10004 ;
|
||||
|
||||
@ -188,24 +188,24 @@ dump esp ;
|
||||
flush ah ;
|
||||
|
||||
# XXX
|
||||
add ::1 ::1 esp 10001 -m transport -E simple ;
|
||||
add ::1 ::1 esp 10001 -m transport -E null ;
|
||||
add ::1 ::1 esp 10002 -m transport -E des-deriv "12341234" ;
|
||||
add ::1 ::1 esp-old 10003 -m transport -E des-32iv "12341234" ;
|
||||
add ::1 ::1 esp 10004 -m transport -E simple -A null ;
|
||||
add ::1 ::1 esp 10005 -m transport -E simple -A hmac-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10006 -m tunnel -E simple -A hmac-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10007 -m transport -E simple -A keyed-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10008 -m any -E simple -A keyed-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10004 -m transport -E null -A null ;
|
||||
add ::1 ::1 esp 10005 -m transport -E null -A hmac-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10006 -m tunnel -E null -A hmac-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10007 -m transport -E null -A keyed-md5 "1234123412341234" ;
|
||||
add ::1 ::1 esp 10008 -m any -E null -A keyed-sha1 "12341234123412341234" ;
|
||||
add ::1 ::1 esp 10009 -m transport -E des-cbc "testtest" ;
|
||||
add ::1 ::1 esp 10010 -m transport -E 3des-cbc "testtest12341234testtest" ;
|
||||
add ::1 ::1 esp 10011 -m tunnel -E cast128-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10012 -m tunnel -E blowfish-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10013 -m tunnel -E rc5-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10014 -m any -E rc5-cbc "testtest1234" ;
|
||||
add ::1 ::1 esp 10015 -m transport -f zero-pad -E simple ;
|
||||
add ::1 ::1 esp 10016 -m tunnel -f random-pad -r 8 -lh 100 -ls 80 -E simple ;
|
||||
add ::1 ::1 esp 10017 -m transport -f seq-pad -f nocyclic-seq -E simple ;
|
||||
add ::1 ::1 esp 10018 -m transport -E simple ;
|
||||
add ::1 ::1 esp 10015 -m transport -f zero-pad -E null ;
|
||||
add ::1 ::1 esp 10016 -m tunnel -f random-pad -r 8 -lh 100 -ls 80 -E null ;
|
||||
add ::1 ::1 esp 10017 -m transport -f seq-pad -f nocyclic-seq -E null ;
|
||||
add ::1 ::1 esp 10018 -m transport -E null ;
|
||||
#add ::1 ::1 ah 20000 -m transport -A null ;
|
||||
add ::1 ::1 ah 20001 -m any -A hmac-md5 "1234123412341234";
|
||||
add ::1 ::1 ah 20002 -m tunnel -A hmac-sha1 "12341234123412341234";
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" $KAME: setkey.8,v 1.49 2001/05/18 05:49:51 sakane Exp $
|
||||
.\" $KAME: setkey.8,v 1.89 2003/09/07 22:17:41 itojun Exp $
|
||||
.\" $FreeBSD$
|
||||
.\"
|
||||
.\" Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
|
||||
@ -34,20 +34,20 @@
|
||||
.\"
|
||||
.Sh NAME
|
||||
.Nm setkey
|
||||
.Nd "manually manipulate the IPsec SA/SP database"
|
||||
.Nd manually manipulate the IPsec SA/SP database
|
||||
.\"
|
||||
.Sh SYNOPSIS
|
||||
.Nm
|
||||
.Op Fl dv
|
||||
.Op Fl v
|
||||
.Fl c
|
||||
.Nm
|
||||
.Op Fl dv
|
||||
.Op Fl v
|
||||
.Fl f Ar filename
|
||||
.Nm
|
||||
.Op Fl adPlv
|
||||
.Op Fl aPlv
|
||||
.Fl D
|
||||
.Nm
|
||||
.Op Fl dPv
|
||||
.Op Fl Pv
|
||||
.Fl F
|
||||
.Nm
|
||||
.Op Fl h
|
||||
@ -56,19 +56,23 @@
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Nm
|
||||
utility adds, updates, dumps, or flushes
|
||||
command adds, updates, dumps, or flushes
|
||||
Security Association Database (SAD) entries
|
||||
as well as Security Policy Database (SPD) entries in the kernel.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
utility takes a series of operations from the standard input
|
||||
(if invoked with
|
||||
.Fl c )
|
||||
command takes a series of operations from the standard input
|
||||
.Po
|
||||
if invoked with
|
||||
.Fl c
|
||||
.Pc
|
||||
or the file named
|
||||
.Ar filename
|
||||
(if invoked with
|
||||
.Fl f Ar filename ) .
|
||||
.Po
|
||||
if invoked with
|
||||
.Fl f Ar filename
|
||||
.Pc .
|
||||
.Bl -tag -width Ds
|
||||
.It Fl D
|
||||
Dump the SAD entries.
|
||||
@ -81,24 +85,15 @@ If with
|
||||
.Fl P ,
|
||||
the SPD entries are flushed.
|
||||
.It Fl a
|
||||
Dead SAD entries are usually not displayed with
|
||||
.Nm
|
||||
usually does not display dead SAD entries with
|
||||
.Fl D .
|
||||
If with
|
||||
.Fl a ,
|
||||
the dead SAD entries will be displayed as well.
|
||||
A dead SAD entry means that
|
||||
it has been expired but remains
|
||||
because it is referenced by SPD entries.
|
||||
.It Fl d
|
||||
Enable to print debugging messages for command parser,
|
||||
without talking to kernel.
|
||||
It is not used usually.
|
||||
.It Fl x
|
||||
Loop forever and dump all the messages transmitted to
|
||||
.Dv PF_KEY
|
||||
socket.
|
||||
.Fl xx
|
||||
makes each timestamps unformatted.
|
||||
it has been expired but remains in the system
|
||||
because it is referenced by some SPD entries.
|
||||
.It Fl h
|
||||
Add hexadecimal dump on
|
||||
.Fl x
|
||||
@ -111,23 +106,39 @@ Be verbose.
|
||||
The program will dump messages exchanged on
|
||||
.Dv PF_KEY
|
||||
socket, including messages sent from other processes to the kernel.
|
||||
.It Fl x
|
||||
Loop forever and dump all the messages transmitted to
|
||||
.Dv PF_KEY
|
||||
socket.
|
||||
.Fl xx
|
||||
makes each timestamps unformatted.
|
||||
.El
|
||||
.Pp
|
||||
Operations have the following grammar.
|
||||
Note that lines starting with
|
||||
hashmarks ('#') are treated as comment lines.
|
||||
.Ss Configuration syntax
|
||||
With
|
||||
.Fl c
|
||||
or
|
||||
.Fl f
|
||||
on the command line,
|
||||
.Nm
|
||||
accepts the following configuration syntax.
|
||||
Lines starting with hash signs ('#') are treated as comment lines.
|
||||
.Bl -tag -width Ds
|
||||
.It Xo
|
||||
.Li add
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol Ar spi
|
||||
.Op Ar extensions
|
||||
.Ar algorithm...
|
||||
.Ar algorithm ...
|
||||
.Li ;
|
||||
.Xc
|
||||
Add an SAD entry.
|
||||
.Li add
|
||||
can fail with multiple reasons,
|
||||
including when the key length does not match the specified algorithm.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li get
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol Ar spi
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -135,6 +146,7 @@ Show an SAD entry.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li delete
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol Ar spi
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -142,6 +154,7 @@ Remove an SAD entry.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li deleteall
|
||||
.Op Fl 46n
|
||||
.Ar src Ar dst Ar protocol
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -153,6 +166,8 @@ Remove all SAD entries that match the specification.
|
||||
.Li ;
|
||||
.Xc
|
||||
Clear all SAD entries matched by the options.
|
||||
.Fl F
|
||||
on the command line achieves the same functionality.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li dump
|
||||
@ -160,9 +175,12 @@ Clear all SAD entries matched by the options.
|
||||
.Li ;
|
||||
.Xc
|
||||
Dumps all SAD entries matched by the options.
|
||||
.Fl D
|
||||
on the command line achieves the same functionality.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li spdadd
|
||||
.Op Fl 46n
|
||||
.Ar src_range Ar dst_range Ar upperspec Ar policy
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -170,6 +188,7 @@ Add an SPD entry.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li spddelete
|
||||
.Op Fl 46n
|
||||
.Ar src_range Ar dst_range Ar upperspec Fl P Ar direction
|
||||
.Li ;
|
||||
.Xc
|
||||
@ -180,12 +199,16 @@ Delete an SPD entry.
|
||||
.Li ;
|
||||
.Xc
|
||||
Clear all SPD entries.
|
||||
.Fl FP
|
||||
on the command line achieves the same functionality.
|
||||
.\"
|
||||
.It Xo
|
||||
.Li spddump
|
||||
.Li ;
|
||||
.Xc
|
||||
Dumps all SPD entries.
|
||||
.Fl DP
|
||||
on the command line achieves the same functionality.
|
||||
.El
|
||||
.\"
|
||||
.Pp
|
||||
@ -196,13 +219,23 @@ Meta-arguments are as follows:
|
||||
.It Ar dst
|
||||
Source/destination of the secure communication is specified as
|
||||
IPv4/v6 address.
|
||||
The
|
||||
.Nm
|
||||
utility does not consult hostname-to-address for arguments
|
||||
.Ar src
|
||||
can resolve a FQDN into numeric addresses.
|
||||
If the FQDN resolves into multiple addresses,
|
||||
.Nm
|
||||
will install multiple SAD/SPD entries into the kernel
|
||||
by trying all possible combinations.
|
||||
.Fl 4 ,
|
||||
.Fl 6
|
||||
and
|
||||
.Ar dst .
|
||||
They must be in numeric form.
|
||||
.Fl n
|
||||
restricts the address resolution of FQDN in certain ways.
|
||||
.Fl 4
|
||||
and
|
||||
.Fl 6
|
||||
restrict results into IPv4/v6 addresses only, respectively.
|
||||
.Fl n
|
||||
avoids FQDN resolution and requires addresses to be numeric addresses.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar protocol
|
||||
@ -210,7 +243,7 @@ They must be in numeric form.
|
||||
is one of following:
|
||||
.Bl -tag -width Fl -compact
|
||||
.It Li esp
|
||||
ESP based on rfc2405
|
||||
ESP based on rfc2406
|
||||
.It Li esp-old
|
||||
ESP based on rfc1827
|
||||
.It Li ah
|
||||
@ -218,21 +251,24 @@ AH based on rfc2402
|
||||
.It Li ah-old
|
||||
AH based on rfc1826
|
||||
.It Li ipcomp
|
||||
IPCOMP
|
||||
IPComp
|
||||
.El
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar spi
|
||||
Security Parameter Index (SPI) for the SAD and the SPD.
|
||||
It must be decimal number or hexadecimal number
|
||||
You cannot use the set of SPI values in the range 0 through 255.
|
||||
(with
|
||||
.Li 0x
|
||||
attached).
|
||||
Security Parameter Index
|
||||
.Pq SPI
|
||||
for the SAD and the SPD.
|
||||
.Ar spi
|
||||
must be a decimal number, or a hexadecimal number with
|
||||
.Dq Li 0x
|
||||
prefix.
|
||||
SPI values between 0 and 255 are reserved for future use by IANA
|
||||
and they cannot be used.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar extensions
|
||||
takes some of the following:
|
||||
take some of the following:
|
||||
.Bl -tag -width Fl -compact
|
||||
.\"
|
||||
.It Fl m Ar mode
|
||||
@ -283,62 +319,41 @@ Specify hard/soft life time duration of the SA.
|
||||
.It Ar algorithm
|
||||
.Bl -tag -width Fl -compact
|
||||
.It Fl E Ar ealgo Ar key
|
||||
Specify an encryption algorithm.
|
||||
Specify an encryption algorithm
|
||||
.Ar ealgo
|
||||
for ESP.
|
||||
.It Xo
|
||||
.Fl E Ar ealgo Ar key
|
||||
.Fl A Ar aalgo Ar key
|
||||
.Xc
|
||||
Specify a encryption algorithm
|
||||
.Ar ealgo ,
|
||||
as well as a payload authentication algorithm
|
||||
.Ar aalgo ,
|
||||
for ESP.
|
||||
.It Fl A Ar aalgo Ar key
|
||||
Specify an authentication algorithm.
|
||||
If
|
||||
.Fl A
|
||||
is used with
|
||||
.Ar protocol Li esp ,
|
||||
it will be treated as ESP payload authentication algorithm.
|
||||
Specify an authentication algorithm for AH.
|
||||
.It Fl C Ar calgo Op Fl R
|
||||
Specify compression algorithm.
|
||||
Specify a compression algorithm for IPComp.
|
||||
If
|
||||
.Fl R
|
||||
is not specified with
|
||||
.Li ipcomp
|
||||
line, the kernel will use well-known IPComp CPI
|
||||
(compression parameter index)
|
||||
on IPComp CPI field on packets, and
|
||||
is specified,
|
||||
.Ar spi
|
||||
field will be ignored.
|
||||
.Ar spi
|
||||
field is only for kernel internal use in this case.
|
||||
.\"Therefore, compression protocol number will appear on IPComp CPI field.
|
||||
field value will be used as the IPComp CPI
|
||||
.Pq compression parameter index
|
||||
on wire as is.
|
||||
If
|
||||
.Fl R
|
||||
is used,
|
||||
the value on
|
||||
is not specified,
|
||||
the kernel will use well-known CPI on wire, and
|
||||
.Ar spi
|
||||
field will appear on IPComp CPI field on outgoing packets.
|
||||
.Ar spi
|
||||
field needs to be smaller than
|
||||
.Li 0x10000
|
||||
in this case.
|
||||
field will be used only as an index for kernel internal usage.
|
||||
.El
|
||||
.Pp
|
||||
.Ar protocol Li esp
|
||||
accepts
|
||||
.Fl E
|
||||
and
|
||||
.Fl A .
|
||||
.Ar protocol Li esp-old
|
||||
accepts
|
||||
.Fl E
|
||||
only.
|
||||
.Ar protocol Li ah
|
||||
and
|
||||
.Li ah-old
|
||||
accept
|
||||
.Fl A
|
||||
only.
|
||||
.Ar protocol Li ipcomp
|
||||
accepts
|
||||
.Fl C
|
||||
only.
|
||||
.Pp
|
||||
.Ar key
|
||||
must be double-quoted character string or series of hexadecimal digits.
|
||||
must be double-quoted character string, or a series of hexadecimal digits
|
||||
preceded by
|
||||
.Dq Li 0x .
|
||||
.Pp
|
||||
Possible values for
|
||||
.Ar ealgo ,
|
||||
@ -369,14 +384,11 @@ The square bracket around
|
||||
.Ar port
|
||||
is really necessary.
|
||||
They are not manpage metacharacters.
|
||||
.Pp
|
||||
The
|
||||
.Nm
|
||||
utility does not consult hostname-to-address for arguments
|
||||
For FQDN resolution, the rules applicable to
|
||||
.Ar src
|
||||
and
|
||||
.Ar dst .
|
||||
They must be in numeric form.
|
||||
.Ar dst
|
||||
apply here as well.
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar upperspec
|
||||
@ -395,34 +407,38 @@ can be specified.
|
||||
stands for
|
||||
.Dq any protocol .
|
||||
Also you can use the protocol number.
|
||||
You can specify a type and/or a code of ICMPv6 when
|
||||
Upper-layer protocol is ICMPv6.
|
||||
the specification can be placed after
|
||||
.Li icmp6 .
|
||||
A type is separated with a code by single comma.
|
||||
A code must be specified anytime.
|
||||
When a zero is specified, the kernel deals with it as a wildcard.
|
||||
Note that the kernel can not distinguish a wildcard from that a type
|
||||
of ICMPv6 is zero.
|
||||
For example, the following means the policy doesn't require IPsec
|
||||
for any inbound Neighbor Solicitation.
|
||||
.Dl spdadd ::/0 ::/0 icmp6 135,0 -P in none ;
|
||||
.Pp
|
||||
NOTE:
|
||||
.Ar upperspec
|
||||
does not work against forwarding case at this moment,
|
||||
as it requires extra reassembly at forwarding node
|
||||
(not implemented at this moment).
|
||||
.Pq not implemented at this moment .
|
||||
We have many protocols in
|
||||
.Pa /etc/protocols ,
|
||||
but protocols except of TCP, UDP and ICMP may not be suitable to use with IPsec.
|
||||
You have to consider and be careful to use them.
|
||||
.Li icmp
|
||||
.Li tcp
|
||||
.Li udp
|
||||
all protocols
|
||||
.\"
|
||||
.Pp
|
||||
.It Ar policy
|
||||
.Ar policy
|
||||
is the one of following:
|
||||
.Bd -literal -offset
|
||||
.Xo
|
||||
.Fl P Ar direction Li discard
|
||||
.Xc
|
||||
.Xo
|
||||
.Fl P Ar direction Li none
|
||||
.Xc
|
||||
.Xo
|
||||
.Fl P Ar direction Li ipsec Ar protocol/mode/src-dst/level
|
||||
is the one of the following three formats:
|
||||
.Bd -literal -offset indent
|
||||
.It Fl P Ar direction Li discard
|
||||
.It Fl P Ar direction Li none
|
||||
.It Xo Fl P Ar direction Li ipsec
|
||||
.Ar protocol/mode/src-dst/level Op ...
|
||||
.Xc
|
||||
.Ed
|
||||
.Pp
|
||||
@ -439,6 +455,9 @@ means the packet matching indexes will be discarded.
|
||||
means that IPsec operation will not take place onto the packet.
|
||||
.Li ipsec
|
||||
means that IPsec operation will take place onto the packet.
|
||||
The part of
|
||||
.Ar protocol/mode/src-dst/level
|
||||
specifies the rule how to process the packet.
|
||||
Either
|
||||
.Li ah ,
|
||||
.Li esp
|
||||
@ -480,7 +499,7 @@ If the SA is not available in every level, the kernel will request
|
||||
getting SA to the key exchange daemon.
|
||||
.Li default
|
||||
means the kernel consults to the system wide default against protocol you
|
||||
specified, e.g.\&
|
||||
specified, e.g.
|
||||
.Li esp_trans_deflev
|
||||
sysctl variable, when the kernel processes the packet.
|
||||
.Li use
|
||||
@ -492,17 +511,29 @@ with the policy.
|
||||
.Li unique
|
||||
is the same to require.
|
||||
In addition, it allows the policy to bind with the unique out-bound SA.
|
||||
If you use the SA by manual keying,
|
||||
You just specify the policy level
|
||||
.Li unique ,
|
||||
.Xr racoon 8
|
||||
will configure the SA for the policy.
|
||||
If you configure the SA by manual keying for that policy,
|
||||
you can put the decimal number as the policy identifier after
|
||||
.Li unique
|
||||
separated by colon
|
||||
.Sq \:
|
||||
.Sq \&:
|
||||
like the following;
|
||||
.Li unique:number .
|
||||
in order to bind this policy to the SA.
|
||||
.Li number
|
||||
must be between 1 and 32767.
|
||||
It corresponds to
|
||||
.Ar extensions Fl u .
|
||||
.Ar extensions Fl u
|
||||
of the manual SA configuration.
|
||||
When you want to use SA bundle, you can define multiple rules.
|
||||
For example, if an IP header was followed by AH header followed by ESP header
|
||||
followed by an upper layer protocol header, the rule
|
||||
would be:
|
||||
.Dl esp/transport//require ah/transport//require ;
|
||||
The rule order is very important.
|
||||
.Pp
|
||||
Note that
|
||||
.Dq Li discard
|
||||
@ -543,7 +574,8 @@ keyed-md5 128 ah: 96bit ICV (no document)
|
||||
keyed-sha1 160 ah: 96bit ICV (no document)
|
||||
160 ah-old: 128bit ICV (no document)
|
||||
null 0 to 2048 for debugging
|
||||
hmac-sha2-256 256 ah: 96bit ICV (no document)
|
||||
hmac-sha2-256 256 ah: 96bit ICV
|
||||
(draft-ietf-ipsec-ciph-sha-256-00)
|
||||
256 ah-old: 128bit ICV (no document)
|
||||
hmac-sha2-384 384 ah: 96bit ICV (no document)
|
||||
384 ah-old: 128bit ICV (no document)
|
||||
@ -551,8 +583,8 @@ hmac-sha2-512 512 ah: 96bit ICV (no document)
|
||||
512 ah-old: 128bit ICV (no document)
|
||||
hmac-ripemd160 160 ah: 96bit ICV (RFC2857)
|
||||
ah-old: 128bit ICV (no document)
|
||||
aes-xcbc-mac 128 ah: 96bit ICV (RFC3566)
|
||||
128 ah-old: 128bit ICV (no document)
|
||||
.\"aes-xcbc-mac 128 ah: 96bit ICV (RFC3566)
|
||||
.\" 128 ah-old: 128bit ICV (no document)
|
||||
.Ed
|
||||
.Pp
|
||||
Followings are the list of encryption algorithms that can be used as
|
||||
@ -567,13 +599,13 @@ parameter:
|
||||
algorithm keylen (bits) comment
|
||||
des-cbc 64 esp-old: rfc1829, esp: rfc2405
|
||||
3des-cbc 192 rfc2451
|
||||
simple 0 to 2048 rfc2410
|
||||
null 0 to 2048 rfc2410
|
||||
blowfish-cbc 40 to 448 rfc2451
|
||||
cast128-cbc 40 to 128 rfc2451
|
||||
des-deriv 64 ipsec-ciph-des-derived-01 (expired)
|
||||
des-deriv 64 ipsec-ciph-des-derived-01
|
||||
3des-deriv 192 no document
|
||||
rijndael-cbc 128/192/256 draft-ietf-ipsec-ciph-aes-cbc-00
|
||||
aes-ctr 160/224/288 draft-ietf-ipsec-ciph-aes-ctr-03
|
||||
rijndael-cbc 128/192/256 rfc3602
|
||||
.\"aes-ctr 160/224/288 draft-ietf-ipsec-ciph-aes-ctr-03
|
||||
.Ed
|
||||
.Pp
|
||||
Note that the first 128 bits of a key for
|
||||
@ -591,44 +623,58 @@ parameter:
|
||||
.Bd -literal -offset indent
|
||||
algorithm comment
|
||||
deflate rfc2394
|
||||
lzs rfc2395
|
||||
.Ed
|
||||
.\"
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal -offset
|
||||
add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
|
||||
-E des-cbc "ESP SA!!" ;
|
||||
|
||||
add 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456
|
||||
-A hmac-sha1 "AH SA configuration!" ;
|
||||
|
||||
add 10.0.11.41 10.0.11.33 esp 0x10001
|
||||
-E des-cbc "ESP with"
|
||||
-A hmac-md5 "authentication!!" ;
|
||||
|
||||
get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;
|
||||
|
||||
flush ;
|
||||
|
||||
dump esp ;
|
||||
|
||||
spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any
|
||||
-P out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ;
|
||||
|
||||
.Ed
|
||||
.\"
|
||||
.Sh RETURN VALUES
|
||||
The command exits with 0 on success, and non-zero on errors.
|
||||
.\"
|
||||
.Sh EXAMPLES
|
||||
.Bd -literal -offset
|
||||
add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
|
||||
-E des-cbc 0x3ffe05014819ffff ;
|
||||
|
||||
add -6 myhost.example.com yourhost.example.com ah 123456
|
||||
-A hmac-sha1 "AH SA configuration!" ;
|
||||
|
||||
add 10.0.11.41 10.0.11.33 esp 0x10001
|
||||
-E des-cbc 0x3ffe05014819ffff
|
||||
-A hmac-md5 "authentication!!" ;
|
||||
|
||||
get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;
|
||||
|
||||
flush ;
|
||||
|
||||
dump esp ;
|
||||
|
||||
spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any
|
||||
-P out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ;
|
||||
|
||||
.Ed
|
||||
.\"
|
||||
.Sh SEE ALSO
|
||||
.Xr ipsec_set_policy 3 ,
|
||||
.Xr racoon 8 ,
|
||||
.Xr sysctl 8
|
||||
.Rs
|
||||
.%T "Changed manual key configuration for IPsec"
|
||||
.%O "http://www.kame.net/newsletter/19991007/"
|
||||
.%D "October 1999"
|
||||
.Re
|
||||
.\"
|
||||
.Sh HISTORY
|
||||
The
|
||||
.Nm
|
||||
utility first appeared in WIDE Hydrangea IPv6 protocol stack kit.
|
||||
command first appeared in WIDE Hydrangea IPv6 protocol stack kit.
|
||||
The command was completely re-designed in June 1998.
|
||||
.\"
|
||||
.\" .Sh BUGS
|
||||
.Sh BUGS
|
||||
.Nm
|
||||
should report and handle syntax errors better.
|
||||
.Pp
|
||||
For IPsec gateway configuration,
|
||||
.Ar src_range
|
||||
and
|
||||
.Ar dst_range
|
||||
with TCP/UDP port number do not work, as the gateway does not reassemble
|
||||
packets
|
||||
.Pq cannot inspect upper-layer headers .
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
/* $KAME: setkey.c,v 1.18 2001/05/08 04:36:39 itojun Exp $ */
|
||||
/* $KAME: setkey.c,v 1.28 2003/06/27 07:15:45 itojun Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
|
||||
@ -58,7 +58,7 @@ int main __P((int, char **));
|
||||
int get_supported __P((void));
|
||||
void sendkeyshort __P((u_int));
|
||||
void promisc __P((void));
|
||||
int sendkeymsg __P((void));
|
||||
int sendkeymsg __P((char *, size_t));
|
||||
int postproc __P((struct sadb_msg *, int));
|
||||
const char *numstr __P((int));
|
||||
void shortdump_hdr __P((void));
|
||||
@ -75,18 +75,12 @@ int so;
|
||||
|
||||
int f_forever = 0;
|
||||
int f_all = 0;
|
||||
int f_debug = 0;
|
||||
int f_verbose = 0;
|
||||
int f_mode = 0;
|
||||
int f_cmddump = 0;
|
||||
int f_policy = 0;
|
||||
int f_hexdump = 0;
|
||||
int f_tflag = 0;
|
||||
char *pname;
|
||||
|
||||
u_char m_buf[BUFSIZ];
|
||||
u_int m_len;
|
||||
|
||||
static time_t thiszone;
|
||||
|
||||
extern int lineno;
|
||||
@ -96,12 +90,12 @@ extern int parse __P((FILE **));
|
||||
void
|
||||
usage()
|
||||
{
|
||||
printf("usage:\t%s [-dv] -c\n", pname);
|
||||
printf("\t%s [-dv] -f (file)\n", pname);
|
||||
printf("\t%s [-Padlv] -D\n", pname);
|
||||
printf("\t%s [-Pdv] -F\n", pname);
|
||||
printf("\t%s [-h] -x\n", pname);
|
||||
pfkey_close(so);
|
||||
|
||||
printf("usage: setkey [-v] -c\n");
|
||||
printf(" setkey [-v] -f filename\n");
|
||||
printf(" setkey [-Palv] -D\n");
|
||||
printf(" setkey [-Pv] -F\n");
|
||||
printf(" setkey [-h] -x\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@ -113,8 +107,6 @@ main(ac, av)
|
||||
FILE *fp = stdin;
|
||||
int c;
|
||||
|
||||
pname = *av;
|
||||
|
||||
if (ac == 1) {
|
||||
usage();
|
||||
/* NOTREACHED */
|
||||
@ -157,9 +149,6 @@ main(ac, av)
|
||||
case 'P':
|
||||
f_policy = 1;
|
||||
break;
|
||||
case 'd':
|
||||
f_debug = 1;
|
||||
break;
|
||||
case 'v':
|
||||
f_verbose = 1;
|
||||
break;
|
||||
@ -169,13 +158,18 @@ main(ac, av)
|
||||
}
|
||||
}
|
||||
|
||||
so = pfkey_open();
|
||||
if (so < 0) {
|
||||
perror("pfkey_open");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
switch (f_mode) {
|
||||
case MODE_CMDDUMP:
|
||||
sendkeyshort(f_policy ? SADB_X_SPDDUMP: SADB_DUMP);
|
||||
break;
|
||||
case MODE_CMDFLUSH:
|
||||
sendkeyshort(f_policy ? SADB_X_SPDFLUSH: SADB_FLUSH);
|
||||
pfkey_close(so);
|
||||
break;
|
||||
case MODE_SCRIPT:
|
||||
if (get_supported() < 0) {
|
||||
@ -199,16 +193,6 @@ main(ac, av)
|
||||
int
|
||||
get_supported()
|
||||
{
|
||||
int so;
|
||||
|
||||
if ((so = pfkey_open()) < 0) {
|
||||
perror("pfkey_open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* debug mode ? */
|
||||
if (f_debug)
|
||||
return 0;
|
||||
|
||||
if (pfkey_send_register(so, SADB_SATYPE_UNSPEC) < 0)
|
||||
return -1;
|
||||
@ -223,20 +207,18 @@ void
|
||||
sendkeyshort(type)
|
||||
u_int type;
|
||||
{
|
||||
struct sadb_msg *m_msg = (struct sadb_msg *)m_buf;
|
||||
struct sadb_msg msg;
|
||||
|
||||
m_len = sizeof(struct sadb_msg);
|
||||
msg.sadb_msg_version = PF_KEY_V2;
|
||||
msg.sadb_msg_type = type;
|
||||
msg.sadb_msg_errno = 0;
|
||||
msg.sadb_msg_satype = SADB_SATYPE_UNSPEC;
|
||||
msg.sadb_msg_len = PFKEY_UNIT64(sizeof(msg));
|
||||
msg.sadb_msg_reserved = 0;
|
||||
msg.sadb_msg_seq = 0;
|
||||
msg.sadb_msg_pid = getpid();
|
||||
|
||||
m_msg->sadb_msg_version = PF_KEY_V2;
|
||||
m_msg->sadb_msg_type = type;
|
||||
m_msg->sadb_msg_errno = 0;
|
||||
m_msg->sadb_msg_satype = SADB_SATYPE_UNSPEC;
|
||||
m_msg->sadb_msg_len = PFKEY_UNIT64(m_len);
|
||||
m_msg->sadb_msg_reserved = 0;
|
||||
m_msg->sadb_msg_seq = 0;
|
||||
m_msg->sadb_msg_pid = getpid();
|
||||
|
||||
sendkeymsg();
|
||||
sendkeymsg((char *)&msg, sizeof(msg));
|
||||
|
||||
return;
|
||||
}
|
||||
@ -244,27 +226,20 @@ sendkeyshort(type)
|
||||
void
|
||||
promisc()
|
||||
{
|
||||
struct sadb_msg *m_msg = (struct sadb_msg *)m_buf;
|
||||
struct sadb_msg msg;
|
||||
u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
|
||||
int so, l;
|
||||
ssize_t l;
|
||||
|
||||
m_len = sizeof(struct sadb_msg);
|
||||
msg.sadb_msg_version = PF_KEY_V2;
|
||||
msg.sadb_msg_type = SADB_X_PROMISC;
|
||||
msg.sadb_msg_errno = 0;
|
||||
msg.sadb_msg_satype = 1;
|
||||
msg.sadb_msg_len = PFKEY_UNIT64(sizeof(msg));
|
||||
msg.sadb_msg_reserved = 0;
|
||||
msg.sadb_msg_seq = 0;
|
||||
msg.sadb_msg_pid = getpid();
|
||||
|
||||
m_msg->sadb_msg_version = PF_KEY_V2;
|
||||
m_msg->sadb_msg_type = SADB_X_PROMISC;
|
||||
m_msg->sadb_msg_errno = 0;
|
||||
m_msg->sadb_msg_satype = 1;
|
||||
m_msg->sadb_msg_len = PFKEY_UNIT64(m_len);
|
||||
m_msg->sadb_msg_reserved = 0;
|
||||
m_msg->sadb_msg_seq = 0;
|
||||
m_msg->sadb_msg_pid = getpid();
|
||||
|
||||
if ((so = socket(PF_KEY, SOCK_RAW, PF_KEY_V2)) < 0) {
|
||||
err(1, "socket(PF_KEY)");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
if ((l = send(so, m_buf, m_len, 0)) < 0) {
|
||||
if ((l = send(so, &msg, sizeof(msg), 0)) < 0) {
|
||||
err(1, "send");
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
@ -301,7 +276,7 @@ promisc()
|
||||
}
|
||||
/* adjust base pointer for promisc mode */
|
||||
if (base->sadb_msg_type == SADB_X_PROMISC) {
|
||||
if (sizeof(*base) < l)
|
||||
if ((ssize_t)sizeof(*base) < l)
|
||||
base++;
|
||||
else
|
||||
base = NULL;
|
||||
@ -315,19 +290,14 @@ promisc()
|
||||
}
|
||||
|
||||
int
|
||||
sendkeymsg()
|
||||
sendkeymsg(buf, len)
|
||||
char *buf;
|
||||
size_t len;
|
||||
{
|
||||
int so;
|
||||
|
||||
u_char rbuf[1024 * 32]; /* XXX: Enough ? Should I do MSG_PEEK ? */
|
||||
int l;
|
||||
ssize_t l;
|
||||
struct sadb_msg *msg;
|
||||
|
||||
if ((so = pfkey_open()) < 0) {
|
||||
perror("pfkey_open");
|
||||
return -1;
|
||||
}
|
||||
|
||||
{
|
||||
struct timeval tv;
|
||||
tv.tv_sec = 1;
|
||||
@ -342,11 +312,23 @@ sendkeymsg()
|
||||
shortdump_hdr();
|
||||
again:
|
||||
if (f_verbose) {
|
||||
kdebug_sadb((struct sadb_msg *)m_buf);
|
||||
kdebug_sadb((struct sadb_msg *)buf);
|
||||
printf("\n");
|
||||
}
|
||||
if (f_hexdump) {
|
||||
int i;
|
||||
for (i = 0; i < len; i++) {
|
||||
if (i % 16 == 0)
|
||||
printf("%08x: ", i);
|
||||
printf("%02x ", buf[i] & 0xff);
|
||||
if (i % 16 == 15)
|
||||
printf("\n");
|
||||
}
|
||||
if (len % 16)
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
if ((l = send(so, m_buf, m_len, 0)) < 0) {
|
||||
if ((l = send(so, buf, len, 0)) < 0) {
|
||||
perror("send");
|
||||
goto end;
|
||||
}
|
||||
@ -378,7 +360,6 @@ sendkeymsg()
|
||||
}
|
||||
|
||||
end:
|
||||
pfkey_close(so);
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* $FreeBSD$ */
|
||||
/* $KAME: token.l,v 1.21 2001/05/18 05:35:01 sakane Exp $ */
|
||||
/* $KAME: token.l,v 1.43 2003/07/25 09:35:28 itojun Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
|
||||
@ -46,30 +46,12 @@
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <netdb.h>
|
||||
|
||||
#include "vchar.h"
|
||||
#ifdef __NetBSD__
|
||||
#include "parse.h"
|
||||
#else
|
||||
#include "y.tab.h"
|
||||
#endif
|
||||
|
||||
#define DECHO \
|
||||
if (f_debug) {printf("<%d>", yy_start); ECHO ; printf("\n"); }
|
||||
|
||||
#define CMDARG \
|
||||
{ \
|
||||
char *__buf__ = strdup(yytext), *__p__; \
|
||||
for (__p__ = __buf__; *__p__ != NULL; __p__++) \
|
||||
if (*__p__ == '\n' || *__p__ == '\t') \
|
||||
*__p__ = ' '; \
|
||||
strcat(cmdarg, __buf__); \
|
||||
free(__buf__); \
|
||||
}
|
||||
|
||||
#define PREPROC DECHO CMDARG
|
||||
|
||||
int lineno = 1;
|
||||
char cmdarg[8192]; /* XXX: BUFSIZ is the better ? */
|
||||
|
||||
extern u_char m_buf[BUFSIZ];
|
||||
extern u_int m_len;
|
||||
@ -81,7 +63,6 @@ void yyerror __P((const char *s));
|
||||
extern void parse_init __P((void));
|
||||
int parse __P((FILE **));
|
||||
int yyparse __P((void));
|
||||
|
||||
%}
|
||||
|
||||
/* common section */
|
||||
@ -90,199 +71,177 @@ ws [ \t]+
|
||||
digit [0-9]
|
||||
letter [0-9A-Za-z]
|
||||
hexdigit [0-9A-Fa-f]
|
||||
/*octet (([01]?{digit}?{digit})|((2([0-4]{digit}))|(25[0-5])))*/
|
||||
special [()+\|\?\*,]
|
||||
dot \.
|
||||
comma \,
|
||||
hyphen \-
|
||||
colon \:
|
||||
slash \/
|
||||
bcl \{
|
||||
ecl \}
|
||||
blcl \[
|
||||
elcl \]
|
||||
percent \%
|
||||
semi \;
|
||||
usec {dot}{digit}{1,6}
|
||||
comment \#.*
|
||||
ccomment "/*"
|
||||
bracketstring \<[^>]*\>
|
||||
quotedstring \"[^"]*\"
|
||||
decstring {digit}+
|
||||
hexpair {hexdigit}{hexdigit}
|
||||
hexstring 0[xX]{hexdigit}+
|
||||
octetstring {octet}({dot}{octet})+
|
||||
ipaddress [a-fA-F0-9:]([a-fA-F0-9:\.]*|[a-fA-F0-9:\.]*%[a-zA-Z0-9]*)
|
||||
ipaddrmask {slash}{digit}{1,3}
|
||||
ipaddrport {blcl}{decstring}{elcl}
|
||||
keyword {letter}{letter}+
|
||||
name {letter}(({letter}|{digit}|{hyphen})*({letter}|{digit}))*
|
||||
hostname {name}(({dot}{name})+{dot}?)?
|
||||
|
||||
%s S_PL
|
||||
%s S_PL S_AUTHALG S_ENCALG
|
||||
|
||||
%%
|
||||
|
||||
add { PREPROC; return(ADD); }
|
||||
delete { PREPROC; return(DELETE); }
|
||||
deleteall { PREPROC; return(DELETEALL); }
|
||||
get { PREPROC; return(GET); }
|
||||
flush { PREPROC; return(FLUSH); }
|
||||
dump { PREPROC; return(DUMP); }
|
||||
add { return(ADD); }
|
||||
delete { return(DELETE); }
|
||||
deleteall { return(DELETEALL); }
|
||||
get { return(GET); }
|
||||
flush { return(FLUSH); }
|
||||
dump { return(DUMP); }
|
||||
|
||||
/* for management SPD */
|
||||
spdadd { PREPROC; return(SPDADD); }
|
||||
spddelete { PREPROC; return(SPDDELETE); }
|
||||
spddump { PREPROC; return(SPDDUMP); }
|
||||
spdflush { PREPROC; return(SPDFLUSH); }
|
||||
{hyphen}P { BEGIN S_PL; PREPROC; return(F_POLICY); }
|
||||
<S_PL>[a-zA-Z0-9:\.\-_/ \n\t][a-zA-Z0-9:\.\-_/ \n\t]* {
|
||||
yymore();
|
||||
spdadd { return(SPDADD); }
|
||||
spddelete { return(SPDDELETE); }
|
||||
spddump { return(SPDDUMP); }
|
||||
spdflush { return(SPDFLUSH); }
|
||||
tagged { return(TAGGED); }
|
||||
{hyphen}P { BEGIN S_PL; return(F_POLICY); }
|
||||
<S_PL>[a-zA-Z0-9:\.\-_/ \n\t][a-zA-Z0-9:\.%\-_/ \n\t]* {
|
||||
yymore();
|
||||
|
||||
/* count up for nl */
|
||||
{
|
||||
char *p;
|
||||
for (p = yytext; *p != NULL; p++)
|
||||
if (*p == '\n')
|
||||
lineno++;
|
||||
}
|
||||
/* count up for nl */
|
||||
{
|
||||
char *p;
|
||||
for (p = yytext; *p != NULL; p++)
|
||||
if (*p == '\n')
|
||||
lineno++;
|
||||
}
|
||||
|
||||
yylval.val.len = strlen(yytext);
|
||||
yylval.val.buf = strdup(yytext);
|
||||
yylval.val.len = strlen(yytext);
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
|
||||
return(PL_REQUESTS);
|
||||
}
|
||||
<S_PL>{semi} { PREPROC; BEGIN INITIAL; return(EOT); }
|
||||
return(PL_REQUESTS);
|
||||
}
|
||||
<S_PL>{semi} { BEGIN INITIAL; return(EOT); }
|
||||
|
||||
/* address resolution flags */
|
||||
{hyphen}[n46][n46]* {
|
||||
yylval.val.len = strlen(yytext);
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
return(F_AIFLAGS);
|
||||
}
|
||||
|
||||
/* security protocols */
|
||||
ah { PREPROC; yylval.num = 0; return(PR_AH); }
|
||||
esp { PREPROC; yylval.num = 0; return(PR_ESP); }
|
||||
ah-old { PREPROC; yylval.num = 1; return(PR_AH); }
|
||||
esp-old { PREPROC; yylval.num = 1; return(PR_ESP); }
|
||||
ipcomp { PREPROC; yylval.num = 0; return(PR_IPCOMP); }
|
||||
ah { yylval.num = 0; return(PR_AH); }
|
||||
esp { yylval.num = 0; return(PR_ESP); }
|
||||
ah-old { yylval.num = 1; return(PR_AH); }
|
||||
esp-old { yylval.num = 1; return(PR_ESP); }
|
||||
ipcomp { yylval.num = 0; return(PR_IPCOMP); }
|
||||
|
||||
/* authentication alogorithm */
|
||||
{hyphen}A { PREPROC; return(F_AUTH); }
|
||||
hmac-md5 { PREPROC; yylval.num = SADB_AALG_MD5HMAC; return(ALG_AUTH); }
|
||||
hmac-sha1 { PREPROC; yylval.num = SADB_AALG_SHA1HMAC; return(ALG_AUTH); }
|
||||
keyed-md5 { PREPROC; yylval.num = SADB_X_AALG_MD5; return(ALG_AUTH); }
|
||||
keyed-sha1 { PREPROC; yylval.num = SADB_X_AALG_SHA; return(ALG_AUTH); }
|
||||
hmac-sha2-256 { PREPROC; yylval.num = SADB_X_AALG_SHA2_256; return(ALG_AUTH); }
|
||||
hmac-sha2-384 { PREPROC; yylval.num = SADB_X_AALG_SHA2_384; return(ALG_AUTH); }
|
||||
hmac-sha2-512 { PREPROC; yylval.num = SADB_X_AALG_SHA2_512; return(ALG_AUTH); }
|
||||
hmac-ripemd160 { PREPROC; yylval.num = SADB_X_AALG_RIPEMD160HMAC; return(ALG_AUTH); }
|
||||
aes-xcbc-mac { PREPROC; yylval.num = SADB_X_AALG_AES_XCBC_MAC; return(ALG_AUTH); }
|
||||
null { PREPROC; yylval.num = SADB_X_AALG_NULL; return(ALG_AUTH); }
|
||||
{hyphen}A { BEGIN S_AUTHALG; return(F_AUTH); }
|
||||
<S_AUTHALG>hmac-md5 { yylval.num = SADB_AALG_MD5HMAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha1 { yylval.num = SADB_AALG_SHA1HMAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>keyed-md5 { yylval.num = SADB_X_AALG_MD5; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>keyed-sha1 { yylval.num = SADB_X_AALG_SHA; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha2-256 { yylval.num = SADB_X_AALG_SHA2_256; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha2-384 { yylval.num = SADB_X_AALG_SHA2_384; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-sha2-512 { yylval.num = SADB_X_AALG_SHA2_512; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>hmac-ripemd160 { yylval.num = SADB_X_AALG_RIPEMD160HMAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>aes-xcbc-mac { yylval.num = SADB_X_AALG_AES_XCBC_MAC; BEGIN INITIAL; return(ALG_AUTH); }
|
||||
<S_AUTHALG>null { yylval.num = SADB_X_AALG_NULL; BEGIN INITIAL; return(ALG_AUTH_NOKEY); }
|
||||
|
||||
/* encryption alogorithm */
|
||||
{hyphen}E { PREPROC; return(F_ENC); }
|
||||
des-cbc { PREPROC; yylval.num = SADB_EALG_DESCBC; return(ALG_ENC); }
|
||||
3des-cbc { PREPROC; yylval.num = SADB_EALG_3DESCBC; return(ALG_ENC); }
|
||||
simple { PREPROC; yylval.num = SADB_EALG_NULL; return(ALG_ENC); }
|
||||
blowfish-cbc { PREPROC; yylval.num = SADB_X_EALG_BLOWFISHCBC; return(ALG_ENC); }
|
||||
cast128-cbc { PREPROC; yylval.num = SADB_X_EALG_CAST128CBC; return(ALG_ENC); }
|
||||
des-deriv { PREPROC; yylval.num = SADB_EALG_DESCBC; return(ALG_ENC_DESDERIV); }
|
||||
des-32iv { PREPROC; yylval.num = SADB_EALG_DESCBC; return(ALG_ENC_DES32IV); }
|
||||
rijndael-cbc { PREPROC; yylval.num = SADB_X_EALG_RIJNDAELCBC; return(ALG_ENC); }
|
||||
aes-ctr { PREPROC; yylval.num = SADB_X_EALG_AESCTR; return(ALG_ENC); }
|
||||
{hyphen}E { BEGIN S_ENCALG; return(F_ENC); }
|
||||
<S_ENCALG>des-cbc { yylval.num = SADB_EALG_DESCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>3des-cbc { yylval.num = SADB_EALG_3DESCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>null { yylval.num = SADB_EALG_NULL; BEGIN INITIAL; return(ALG_ENC_NOKEY); }
|
||||
<S_ENCALG>simple { yylval.num = SADB_EALG_NULL; BEGIN INITIAL; return(ALG_ENC_OLD); }
|
||||
<S_ENCALG>blowfish-cbc { yylval.num = SADB_X_EALG_BLOWFISHCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>cast128-cbc { yylval.num = SADB_X_EALG_CAST128CBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>des-deriv { yylval.num = SADB_EALG_DESCBC; BEGIN INITIAL; return(ALG_ENC_DESDERIV); }
|
||||
<S_ENCALG>des-32iv { yylval.num = SADB_EALG_DESCBC; BEGIN INITIAL; return(ALG_ENC_DES32IV); }
|
||||
<S_ENCALG>rijndael-cbc { yylval.num = SADB_X_EALG_RIJNDAELCBC; BEGIN INITIAL; return(ALG_ENC); }
|
||||
<S_ENCALG>aes-ctr { yylval.num = SADB_X_EALG_AESCTR; BEGIN INITIAL; return(ALG_ENC); }
|
||||
|
||||
/* compression algorithms */
|
||||
{hyphen}C { PREPROC; return(F_COMP); }
|
||||
oui { PREPROC; yylval.num = SADB_X_CALG_OUI; return(ALG_COMP); }
|
||||
deflate { PREPROC; yylval.num = SADB_X_CALG_DEFLATE; return(ALG_COMP); }
|
||||
lzs { PREPROC; yylval.num = SADB_X_CALG_LZS; return(ALG_COMP); }
|
||||
{hyphen}R { PREPROC; return(F_RAWCPI); }
|
||||
{hyphen}C { return(F_COMP); }
|
||||
oui { yylval.num = SADB_X_CALG_OUI; return(ALG_COMP); }
|
||||
deflate { yylval.num = SADB_X_CALG_DEFLATE; return(ALG_COMP); }
|
||||
lzs { yylval.num = SADB_X_CALG_LZS; return(ALG_COMP); }
|
||||
{hyphen}R { return(F_RAWCPI); }
|
||||
|
||||
/* extension */
|
||||
{hyphen}m { PREPROC; return(F_MODE); }
|
||||
transport { PREPROC; yylval.num = IPSEC_MODE_TRANSPORT; return(MODE); }
|
||||
tunnel { PREPROC; yylval.num = IPSEC_MODE_TUNNEL; return(MODE); }
|
||||
{hyphen}u { PREPROC; return(F_REQID); }
|
||||
{hyphen}f { PREPROC; return(F_EXT); }
|
||||
random-pad { PREPROC; yylval.num = SADB_X_EXT_PRAND; return(EXTENSION); }
|
||||
seq-pad { PREPROC; yylval.num = SADB_X_EXT_PSEQ; return(EXTENSION); }
|
||||
zero-pad { PREPROC; yylval.num = SADB_X_EXT_PZERO; return(EXTENSION); }
|
||||
nocyclic-seq { PREPROC; return(NOCYCLICSEQ); }
|
||||
{hyphen}r { PREPROC; return(F_REPLAY); }
|
||||
{hyphen}lh { PREPROC; return(F_LIFETIME_HARD); }
|
||||
{hyphen}ls { PREPROC; return(F_LIFETIME_SOFT); }
|
||||
{hyphen}m { return(F_MODE); }
|
||||
transport { yylval.num = IPSEC_MODE_TRANSPORT; return(MODE); }
|
||||
tunnel { yylval.num = IPSEC_MODE_TUNNEL; return(MODE); }
|
||||
{hyphen}u { return(F_REQID); }
|
||||
{hyphen}f { return(F_EXT); }
|
||||
random-pad { yylval.num = SADB_X_EXT_PRAND; return(EXTENSION); }
|
||||
seq-pad { yylval.num = SADB_X_EXT_PSEQ; return(EXTENSION); }
|
||||
zero-pad { yylval.num = SADB_X_EXT_PZERO; return(EXTENSION); }
|
||||
nocyclic-seq { return(NOCYCLICSEQ); }
|
||||
{hyphen}r { return(F_REPLAY); }
|
||||
{hyphen}lh { return(F_LIFETIME_HARD); }
|
||||
{hyphen}ls { return(F_LIFETIME_SOFT); }
|
||||
|
||||
/* ... */
|
||||
any { PREPROC; return(ANY); }
|
||||
{ws} { PREPROC; }
|
||||
any { return(ANY); }
|
||||
{ws} { }
|
||||
{nl} { lineno++; }
|
||||
{comment}
|
||||
{semi} { PREPROC; return(EOT); }
|
||||
{semi} { return(EOT); }
|
||||
|
||||
/* for address parameters: /prefix, [port] */
|
||||
{slash} { return SLASH; }
|
||||
{blcl} { return BLCL; }
|
||||
{elcl} { return ELCL; }
|
||||
|
||||
/* parameter */
|
||||
{decstring} {
|
||||
char *bp;
|
||||
|
||||
PREPROC;
|
||||
yylval.num = strtoul(yytext, &bp, 10);
|
||||
yylval.ulnum = strtoul(yytext, &bp, 10);
|
||||
return(DECSTRING);
|
||||
}
|
||||
|
||||
{ipaddress} {
|
||||
PREPROC;
|
||||
|
||||
yylval.val.len = yyleng;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
|
||||
return(ADDRESS);
|
||||
}
|
||||
|
||||
{ipaddrmask} {
|
||||
PREPROC;
|
||||
yytext++;
|
||||
yylval.num = atoi(yytext);
|
||||
return(PREFIX);
|
||||
}
|
||||
|
||||
{ipaddrport} {
|
||||
char *p = yytext;
|
||||
PREPROC;
|
||||
while (*++p != ']') ;
|
||||
*p = NULL;
|
||||
yytext++;
|
||||
yylval.num = atoi(yytext);
|
||||
return(PORT);
|
||||
}
|
||||
|
||||
{blcl}any{elcl} {
|
||||
PREPROC;
|
||||
return(PORTANY);
|
||||
}
|
||||
|
||||
{hexstring} {
|
||||
int len = yyleng - 2; /* (str - "0x") */
|
||||
PREPROC;
|
||||
yylval.val.len = (len & 1) + (len / 2);
|
||||
/* fixed string if length is odd. */
|
||||
if (len & 1) {
|
||||
yytext[1] = '0';
|
||||
yylval.val.buf = strdup(yytext + 1);
|
||||
} else
|
||||
yylval.val.buf = strdup(yytext + 2);
|
||||
yylval.val.buf = strdup(yytext + 2);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
yylval.val.len = strlen(yylval.val.buf);
|
||||
|
||||
return(HEXSTRING);
|
||||
}
|
||||
|
||||
{quotedstring} {
|
||||
char *p = yytext;
|
||||
PREPROC;
|
||||
while (*++p != '"') ;
|
||||
*p = NULL;
|
||||
yytext++;
|
||||
yylval.val.len = yyleng - 2;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
|
||||
return(QUOTEDSTRING);
|
||||
}
|
||||
|
||||
[a-z0-9.\-]* {
|
||||
[A-Za-z0-9:][A-Za-z0-9:%\.-]* {
|
||||
yylval.val.len = yyleng;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
return(STRING);
|
||||
}
|
||||
|
||||
[0-9,]+ {
|
||||
yylval.val.len = yyleng;
|
||||
yylval.val.buf = strdup(yytext);
|
||||
if (!yylval.val.buf)
|
||||
yyfatal("insufficient memory");
|
||||
return(STRING);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user