From c06e0c893a1332c2a4d1f3159f6a46c487a05a9d Mon Sep 17 00:00:00 2001 From: pbldp <> Date: Sat, 3 May 2014 11:18:24 +0000 Subject: [PATCH] cosmetic update --- .../Peter-Bieringer/Linux+IPv6-HOWTO.de.html | 13 +- .../Peter-Bieringer/Linux+IPv6-HOWTO.de.lyx | 46 +- .../Peter-Bieringer/Linux+IPv6-HOWTO.de.pdf | Bin 519793 -> 520482 bytes .../Peter-Bieringer/Linux+IPv6-HOWTO.de.sgml | 13 +- .../Peter-Bieringer/Linux+IPv6-HOWTO.html | 13 +- .../Peter-Bieringer/Linux+IPv6-HOWTO.lyx | 3071 ++++++++++++++++- .../Peter-Bieringer/Linux+IPv6-HOWTO.pdf | Bin 583893 -> 583941 bytes .../Peter-Bieringer/Linux+IPv6-HOWTO.sgml | 13 +- .../Peter-Bieringer/lyxcodelinewrapper.pl | 2 +- 9 files changed, 3142 insertions(+), 29 deletions(-) diff --git a/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.de.html b/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.de.html index 10d6e104..2699346c 100644 --- a/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.de.html +++ b/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.de.html @@ -11542,7 +11542,12 @@ WIDTH="100%" COLOR="#000000" >
# nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } ip6 hoplimit 1 accept # nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } ip6 hoplimit 255 accept
# nft add rule ip6 filter input icmpv6 type +¬ { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } +¬ ip6 hoplimit 1 accept +# nft add rule ip6 filter input icmpv6 type +¬ { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } +¬ ip6 hoplimit 255 accept;D_x|zSyZ7^m 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

6uSGK1 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 HY=!;~Q8U&a delta 141267 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 einiger wichtiger IPv6 ICMP Pakete, ohne Zähler, dafür mit Hop-Limit-Prüfung (erhöht die Sicherheit) -Erlauben von eingehenden SSH-Verbindungen für IPv4 und IPv6 unter Nutzung der IP-Version unabhängigen Tabelle “inet” @@ -2022,8 +2027,10 @@ table ip6 filter { chain input { type filter hook input priority 1; icmpv6 type echo-request counter packets 0 bytes 0 accept - ip6 hoplimit 1 icmpv6 type { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept - ip6 hoplimit 255 icmpv6 type { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept + ip6 hoplimit 1 icmpv6 type +¬ { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept + ip6 hoplimit 255 icmpv6 type +¬ { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept } } ]]>Tabelle für IP unabhängigen Filter diff --git a/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.html b/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.html index 2485dfef..78e24e50 100644 --- a/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.html +++ b/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.html @@ -11659,7 +11659,12 @@ WIDTH="100%" COLOR="#000000" >
# nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } ip6 hoplimit 1 accept # nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } ip6 hoplimit 255 accept
# nft add rule ip6 filter input icmpv6 type +¬ { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } +¬ ip6 hoplimit 1 accept +# nft add rule ip6 filter input icmpv6 type +¬ { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } +¬ ip6 hoplimit 255 accept \end_layout @@ -1296,6 +1298,7 @@ For real use on your system command line or in scripts this has to be replaced \end_layout \begin_layout Code + 1.2.3.4 \end_layout @@ -1308,6 +1311,7 @@ Commands executable as non-root user begin with $, e.g. \end_layout \begin_layout Code + $ whoami \end_layout @@ -1316,6 +1320,7 @@ Commands executable as root user begin with #, e.g. \end_layout \begin_layout Code + # whoami \end_layout @@ -1510,58 +1515,72 @@ The first IPv6 related network code was added to the Linux kernel 2.1.8 in \end_layout \begin_layout Code + diff -u --recursive --new-file v2.1.7/linux/include/linux/in6.h \end_layout \begin_layout Code + ¬ linux/include/linux/in6.h \end_layout \begin_layout Code + --- v2.1.7/linux/include/linux/in6.h Thu Jan 1 02:00:00 1970 \end_layout \begin_layout Code + +++ linux/include/linux/in6.h Sun Nov 3 11:04:42 1996 \end_layout \begin_layout Code + @@ -0,0 +1,99 @@ \end_layout \begin_layout Code + +/* \end_layout \begin_layout Code + + * Types and definitions for AF_INET6 \end_layout \begin_layout Code + + * Linux INET6 implementation \end_layout \begin_layout Code + + * + * Authors: \end_layout \begin_layout Code + + * Pedro Roque <******> \end_layout \begin_layout Code + + * \end_layout \begin_layout Code + + * Source: \end_layout \begin_layout Code + + * IPv6 Program Interfaces for BSD Systems \end_layout \begin_layout Code + + * \end_layout @@ -1670,6 +1689,7 @@ As previously mentioned, IPv6 addresses are 128 bits long. \end_layout \begin_layout Code + 2^128-1: 340282366920938463463374607431768211455 \end_layout @@ -1692,6 +1712,7 @@ nibble \end_layout \begin_layout Code + 2^128-1: 0xffffffffffffffffffffffffffffffff \end_layout @@ -1709,6 +1730,7 @@ This representation is still not very convenient (possible mix-up or loss \end_layout \begin_layout Code + 2^128-1: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff \end_layout @@ -1718,6 +1740,7 @@ A usable address (see address types later) is e.g.: \end_layout \begin_layout Code + 2001:0db8:0100:f101:0210:a4ff:fee3:9566 \end_layout @@ -1728,10 +1751,12 @@ For simplifications, leading zeros of each 16 bit block can be omitted: \end_layout \begin_layout Code + 2001:0db8:0100:f101:0210:a4ff:fee3:9566 -> \end_layout \begin_layout Code + ¬ 2001:db8:100:f101:210:a4ff:fee3:9566 \end_layout @@ -1757,6 +1782,7 @@ ion. \end_layout \begin_layout Code + 2001:0db8:100:f101:0:0:0:1 -> 2001:db8:100:f101::1 \end_layout @@ -1766,6 +1792,7 @@ The biggest reduction is seen by the IPv6 localhost address: \end_layout \begin_layout Code + 0000:0000:0000:0000:0000:0000:0000:0001 -> ::1 \end_layout @@ -1789,10 +1816,12 @@ target "http://www.faqs.org/rfcs/rfc1924.html" \end_layout \begin_layout Code + # ipv6calc --addr_to_base85 2001:0db8:0100:f101:0210:a4ff:fee3:9566 \end_layout \begin_layout Code + 9R}vSQZ1W=9A_Q74Lz&R \end_layout @@ -2003,6 +2032,7 @@ This is a special address for the loopback interface, similiar to IPv4 with \end_layout \begin_layout Code + 0000:0000:0000:0000:0000:0000:0000:0001 \end_layout @@ -2011,6 +2041,7 @@ or compressed: \end_layout \begin_layout Code + ::1 \end_layout @@ -2046,6 +2077,7 @@ any \end_layout \begin_layout Code + 0000:0000:0000:0000:0000:0000:0000:0000 \end_layout @@ -2054,6 +2086,7 @@ or: \end_layout \begin_layout Code + :: \end_layout @@ -2089,6 +2122,7 @@ These addresses are defined with a special prefix of length 96 (a.b.c.d is \end_layout \begin_layout Code + 0:0:0:0:0:ffff:a.b.c.d/96 \end_layout @@ -2097,6 +2131,7 @@ or in compressed format \end_layout \begin_layout Code + ::ffff:a.b.c.d/96 \end_layout @@ -2105,6 +2140,7 @@ For example, the IPv4 address 1.2.3.4 looks like this: \end_layout \begin_layout Code + ::ffff:1.2.3.4 \end_layout @@ -2133,6 +2169,7 @@ reference "tunneling-6to4" \end_layout \begin_layout Code + 0:0:0:0:0:0:a.b.c.d/96 \end_layout @@ -2141,6 +2178,7 @@ or in compressed format \end_layout \begin_layout Code + ::a.b.c.d/96 \end_layout @@ -2221,18 +2259,22 @@ x \end_layout \begin_layout Code + fe8x: <- currently the only one in use \end_layout \begin_layout Code + fe9x: \end_layout \begin_layout Code + feax: \end_layout \begin_layout Code + febx: \end_layout @@ -2278,18 +2320,22 @@ It begins with: \end_layout \begin_layout Code + fecx: <- most commonly used \end_layout \begin_layout Code + fedx: \end_layout \begin_layout Code + feex: \end_layout \begin_layout Code + fefx: \end_layout @@ -2364,10 +2410,12 @@ It begins with: \end_layout \begin_layout Code + fcxx: \end_layout \begin_layout Code + fdxx: <- currently the only one in use \end_layout @@ -2390,6 +2438,7 @@ target "http://www.goebel-consult.de/ipv6/createLULA" \end_layout \begin_layout Code + fd0f:8b72:ac90::/48 \end_layout @@ -2421,10 +2470,12 @@ x \end_layout \begin_layout Code + 2xxx: \end_layout \begin_layout Code + 3xxx: \end_layout @@ -2455,6 +2506,7 @@ These were the first global addresses which were defined and in use. \end_layout \begin_layout Code + 3ffe: \end_layout @@ -2463,6 +2515,7 @@ Example: \end_layout \begin_layout Code + 3ffe:ffff:100:f102::1 \end_layout @@ -2472,6 +2525,7 @@ A special 6bone test address which will never be globally unique begins \end_layout \begin_layout Code + 3ffe:ffff: \end_layout @@ -2523,6 +2577,7 @@ target "http://www.faqs.org/rfcs/rfc2893.html" \end_layout \begin_layout Code + 2002: \end_layout @@ -2531,6 +2586,7 @@ For example, representing 192.168.1.1/5: \end_layout \begin_layout Code + 2002:c0a8:0101:5::1 \end_layout @@ -2540,10 +2596,12 @@ A small shell command line can help you generating such address out of a \end_layout \begin_layout Code + ipv4="1.2.3.4"; sla="5"; printf "2002:%02x%02x:%02x%02x:%04x::1" `echo $ipv4 \end_layout \begin_layout Code + ¬ | tr "." " "` $sla \end_layout @@ -2577,6 +2635,7 @@ These addresses are delegated to Internet service providers (ISP) and begin \end_layout \begin_layout Code + 2001: \end_layout @@ -2615,10 +2674,12 @@ target "http://www.faqs.org/rfcs/rfc3849.html" \end_layout \begin_layout Code + 3fff:ffff::/32 \end_layout \begin_layout Code + 2001:0DB8::/32 EXAMPLENET-WF \end_layout @@ -2647,6 +2708,7 @@ xx \end_layout \begin_layout Code + ffxy: \end_layout @@ -2735,6 +2797,7 @@ An example of this address looks like \end_layout \begin_layout Code + ff02::1:ff00:1234 \end_layout @@ -2791,6 +2854,7 @@ A simple example for an anycast address is the subnet-router anycast address. \end_layout \begin_layout Code + 2001:db8:100:f101:210:a4ff:fee3:9566/64 <- Node's address \end_layout @@ -2800,6 +2864,7 @@ The subnet-router anycast address will be created blanking the suffix (least \end_layout \begin_layout Code + 2001:db8:100:f101::/64 <- subnet-router anycast address \end_layout @@ -2839,6 +2904,7 @@ E.g. \end_layout \begin_layout Code + 00:10:a4:01:23:45 \end_layout @@ -2856,6 +2922,7 @@ target "http://standards.ieee.org/regauth/oui/tutorials/EUI64.html" \end_layout \begin_layout Code + 0210:a4ff:fe01:2345 \end_layout @@ -2865,6 +2932,7 @@ With a given prefix, the result is the IPv6 address shown in example above: \end_layout \begin_layout Code + 2001:0db8:0100:f101:0210:a4ff:fe01:2345 \end_layout @@ -2917,6 +2985,7 @@ For servers, it's probably easier to remember simpler addresses, this can \end_layout \begin_layout Code + 2001:0db8:100:f101::1 \end_layout @@ -3008,6 +3077,7 @@ An example: \end_layout \begin_layout Code + 2001:0db8:100:1:2:3:4:5/48 \end_layout @@ -3021,6 +3091,7 @@ Network: \end_layout \begin_layout Code + 2001:0db8:0100:0000:0000:0000:0000:0000 \end_layout @@ -3029,6 +3100,7 @@ Netmask: \end_layout \begin_layout Code + ffff:ffff:ffff:0000:0000:0000:0000:0000 \end_layout @@ -3047,10 +3119,12 @@ For example if a routing table shows following entries (list is not complete): \end_layout \begin_layout Code + 2001:0db8:100::/48 :: U 1 0 0 sit1 \end_layout \begin_layout Code + 2000::/3 ::192.88.99.1 UG 1 0 0 tun6to4 \end_layout @@ -3060,10 +3134,12 @@ Shown destination addresses of IPv6 packets will be routed through shown \end_layout \begin_layout Code + 2001:0db8:100:1:2:3:4:5/48 -> routed through device sit1 \end_layout \begin_layout Code + 2001:0db8:200:1:2:3:4:5/48 -> routed through device tun6to4 \end_layout @@ -3127,6 +3203,7 @@ To check, whether your current running kernel supports IPv6, take a look \end_layout \begin_layout Code + /proc/net/if_inet6 \end_layout @@ -3136,6 +3213,7 @@ A short automatical test looks like: \end_layout \begin_layout Code + # test -f /proc/net/if_inet6 && echo "Running kernel is IPv6 ready" \end_layout @@ -3154,6 +3232,7 @@ You can try to load the IPv6 module executing \end_layout \begin_layout Code + # modprobe ipv6 \end_layout @@ -3164,6 +3243,7 @@ If this is successful, this module should be listed, testable with following \end_layout \begin_layout Code + # lsmod |grep -w 'ipv6' && echo "IPv6 module successfully loaded" \end_layout @@ -3188,6 +3268,7 @@ Its possible to automatically load the IPv6 module on demand. \end_layout \begin_layout Code + alias net-pf-10 ipv6 # automatically load IPv6 module on demand \end_layout @@ -3197,6 +3278,7 @@ It's also possible to disable automatically loading of the IPv6 module using \end_layout \begin_layout Code + alias net-pf-10 off # disable automatically load of IPv6 module on demand \end_layout @@ -3454,10 +3536,12 @@ Auto-magically check: \end_layout \begin_layout Code + # /sbin/ifconfig -? 2>& 1|grep -qw 'inet6' && echo "utility 'ifconfig' is \end_layout \begin_layout Code + ¬ IPv6-ready" \end_layout @@ -3471,6 +3555,7 @@ route \end_layout \begin_layout Code + # /sbin/route -? 2>& 1|grep -qw 'inet6' && echo "utility 'route' is IPv6-ready" \end_layout @@ -3489,6 +3574,7 @@ Alexey N. \end_layout \begin_layout Code + # /sbin/ip 2>&1 |grep -qw 'inet6' && echo "utility 'ip' is IPv6-ready" \end_layout @@ -3552,14 +3638,17 @@ Usage \end_layout \begin_layout Code + # ping6 \end_layout \begin_layout Code + # ping6 \end_layout \begin_layout Code + # ping6 [-I ] \end_layout @@ -3569,6 +3658,7 @@ Some implementation also support % suffix instead of using -I , \end_layout \begin_layout Code + # ping6 % \end_layout @@ -3577,14 +3667,17 @@ Example \end_layout \begin_layout Code + # ping6 -c 1 ::1 \end_layout \begin_layout Code + PING ::1(::1) from ::1 : 56 data bytes \end_layout \begin_layout Code + 64 bytes from ::1: icmp_seq=0 hops=64 time=292 usec \end_layout @@ -3593,14 +3686,17 @@ PING ::1(::1) from ::1 : 56 data bytes \end_layout \begin_layout Code + --- ::1 ping statistics --- \end_layout \begin_layout Code + 1 packets transmitted, 1 packets received, 0% packet loss \end_layout \begin_layout Code + round-trip min/avg/max/mdev = 0.292/0.292/0.292/0.000 ms \end_layout @@ -3631,10 +3727,12 @@ Using link-local addresses for an IPv6 ping, the kernel does not know through \end_layout \begin_layout Code + # ping6 fe80::212:34ff:fe12:3456 \end_layout \begin_layout Code + connect: Invalid argument \end_layout @@ -3643,18 +3741,22 @@ In this case you have to specify the interface additionally like shown here: \end_layout \begin_layout Code + # ping6 -I eth0 -c 1 fe80::2e0:18ff:fe90:9205 \end_layout \begin_layout Code + PING fe80::212:23ff:fe12:3456(fe80::212:23ff:fe12:3456) from \end_layout \begin_layout Code + ¬ fe80::212:34ff:fe12:3478 eth0: 56 data bytes \end_layout \begin_layout Code + 64 bytes from fe80::212:23ff:fe12:3456: icmp_seq=0 hops=64 time=445 usec \end_layout @@ -3663,14 +3765,17 @@ PING fe80::212:23ff:fe12:3456(fe80::212:23ff:fe12:3456) from \end_layout \begin_layout Code + --- fe80::2e0:18ff:fe90:9205 ping statistics --- \end_layout \begin_layout Code + 1 packets transmitted, 1 packets received, 0% packet loss round-trip \end_layout \begin_layout Code + ¬ min/avg/max/mdev = 0.445/0.445/0.445/0.000 ms \end_layout @@ -3679,6 +3784,7 @@ Example for % notation: \end_layout \begin_layout Code + # ping6 -c 1 fe80::2e0:18ff:fe90:9205%eth0 \end_layout @@ -3692,18 +3798,22 @@ An interesting mechanism to detect IPv6-active hosts on a link is to ping6 \end_layout \begin_layout Code + # ping6 -I eth0 ff02::1 \end_layout \begin_layout Code + PING ff02::1(ff02::1) from fe80:::2ab:cdff:feef:0123 eth0: 56 data bytes \end_layout \begin_layout Code + 64 bytes from ::1: icmp_seq=1 ttl=64 time=0.104 ms \end_layout \begin_layout Code + 64 bytes from fe80::212:34ff:fe12:3450: icmp_seq=1 ttl=64 time=0.549 ms (DUP!) \end_layout @@ -3713,6 +3823,7 @@ Example for % notation: \end_layout \begin_layout Code + # ping6 ff02::1%eth0 \end_layout @@ -3743,42 +3854,51 @@ iputils \end_layout \begin_layout Code + # traceroute6 www.6bone.net \end_layout \begin_layout Code + traceroute to 6bone.net (3ffe:b00:c18:1::10) from 2001:0db8:0000:f101::2, 30 \end_layout \begin_layout Code + ¬ hops max, 16 byte packets \end_layout \begin_layout Code + 1 localipv6gateway (2001:0db8:0000:f101::1) 1.354 ms 1.566 ms 0.407 ms \end_layout \begin_layout Code + 2 swi6T1-T0.ipv6.switch.ch (3ffe:2000:0:400::1) 90.431 ms 91.956 ms 92.377 ms \end_layout \begin_layout Code + 3 3ffe:2000:0:1::132 (3ffe:2000:0:1::132) 118.945 ms 107.982 ms 114.557 ms \end_layout \begin_layout Code + 4 3ffe:c00:8023:2b::2 (3ffe:c00:8023:2b::2) 968.468 ms 993.392 ms 973.441 ms \end_layout \begin_layout Code + 5 3ffe:2e00:e:c::3 (3ffe:2e00:e:c::3) 507.784 ms 505.549 ms 508.928 ms \end_layout \begin_layout Code + 6 www.6bone.net (3ffe:b00:c18:1::10) 1265.85 ms * 1304.74 ms \end_layout @@ -3820,42 +3940,52 @@ iputils \end_layout \begin_layout Code + # tracepath6 www.6bone.net \end_layout \begin_layout Code + 1?: [LOCALHOST] pmtu 1480 \end_layout \begin_layout Code + 1: 3ffe:401::2c0:33ff:fe02:14 150.705ms \end_layout \begin_layout Code + 2: 3ffe:b00:c18::5 267.864ms \end_layout \begin_layout Code + 3: 3ffe:b00:c18::5 asymm 2 266.145ms pmtu 1280 \end_layout \begin_layout Code + 3: 3ffe:3900:5::2 asymm 4 346.632ms \end_layout \begin_layout Code + 4: 3ffe:28ff:ffff:4::3 asymm 5 365.965ms \end_layout \begin_layout Code + 5: 3ffe:1cff:0:ee::2 asymm 4 534.704ms \end_layout \begin_layout Code + 6: 3ffe:3800::1:1 asymm 4 578.126ms !N \end_layout \begin_layout Code + Resume: pmtu 1280 \end_layout @@ -3944,26 +4074,32 @@ IPv6 ping to \end_layout \begin_layout Code + # tcpdump -t -n -i eth0 -s 512 -vv ip6 or proto ipv6 \end_layout \begin_layout Code + tcpdump: listening on eth0 \end_layout \begin_layout Code + 2001:0db8:100:f101:2e0:18ff:fe90:9205 > 2001:0db8:100:f101::1: icmp6: echo \end_layout \begin_layout Code + ¬ request (len 64, hlim 64) \end_layout \begin_layout Code + 2001:0db8:100:f101::1 > 2001:0db8:100:f101:2e0:18ff:fe90:9205: icmp6: echo \end_layout \begin_layout Code + ¬ reply (len 64, hlim 64) \end_layout @@ -3980,42 +4116,52 @@ IPv6 ping to \end_layout \begin_layout Code + # tcpdump -t -n -i ppp0 -s 512 -vv ip6 or proto ipv6 \end_layout \begin_layout Code + tcpdump: listening on ppp0 \end_layout \begin_layout Code + 1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 2001:0db8:100::1: icmp6: echo request \end_layout \begin_layout Code + ¬ (len 64, hlim 64) (DF) (ttl 64, id 0, len 124) \end_layout \begin_layout Code + 5.6.7.8 > 1.2.3.4: 2001:0db8:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len \end_layout \begin_layout Code + ¬ 64, hlim 61) (ttl 23, id 29887, len 124) \end_layout \begin_layout Code + 1.2.3.4 > 5.6.7.8: 2002:ffff:f5f8::1 > 2001:0db8:100::1: icmp6: echo request \end_layout \begin_layout Code + ¬ (len 64, hlim 64) (DF) (ttl 64, id 0, len 124) \end_layout \begin_layout Code + 5.6.7.8 > 1.2.3.4: 2001:0db8:100::1 > 2002:ffff:f5f8::1: icmp6: echo reply (len \end_layout \begin_layout Code + ¬ 64, hlim 61) (ttl 23, id 29919, len 124) \end_layout @@ -4099,6 +4245,7 @@ Because of security updates in the last years every Domain Name System (DNS) \end_layout \begin_layout Code + # host -t AAAA www.join.uni-muenster.de \end_layout @@ -4107,17 +4254,20 @@ and should show something like following: \end_layout \begin_layout Code + www.join.uni-muenster.de. is an alias for tolot.join.uni-muenster.de. \end_layout \begin_layout Code + tolot.join.uni-muenster.de. has AAAA address \end_layout \begin_layout Code + ¬ 2001:638:500:101:2e0:81ff:fe24:37c6 \end_layout @@ -4131,25 +4281,30 @@ IPv6-ready telnet clients are available. \end_layout \begin_layout Code + $ telnet 3ffe:400:100::1 80 \end_layout \begin_layout Code + Trying 3ffe:400:100::1... \end_layout \begin_layout Code + Connected to 3ffe:400:100::1. \end_layout \begin_layout Code + Escape character is '^]'. \end_layout \begin_layout Code + HEAD / HTTP/1.0 \end_layout @@ -4158,38 +4313,47 @@ HEAD / HTTP/1.0 \end_layout \begin_layout Code + HTTP/1.1 200 OK \end_layout \begin_layout Code + Date: Sun, 16 Dec 2001 16:07:21 \end_layout \begin_layout Code + GMT Server: Apache/2.0.28 (Unix) \end_layout \begin_layout Code + Last-Modified: Wed, 01 Aug 2001 21:34:42 GMT \end_layout \begin_layout Code + ETag: "3f02-a4d-b1b3e080" \end_layout \begin_layout Code + Accept-Ranges: bytes \end_layout \begin_layout Code + Content-Length: 2637 \end_layout \begin_layout Code + Connection: close \end_layout \begin_layout Code + Content-Type: text/html; charset=ISO-8859-1 \end_layout @@ -4198,6 +4362,7 @@ Content-Type: text/html; charset=ISO-8859-1 \end_layout \begin_layout Code + Connection closed by foreign host. \end_layout @@ -4238,14 +4403,17 @@ Current versions of openssh are IPv6-ready. \end_layout \begin_layout Code + $ ssh -6 ::1 \end_layout \begin_layout Code + user@::1's password: ****** \end_layout \begin_layout Code + [user@ipv6host user]$ \end_layout @@ -4792,10 +4960,12 @@ Usage: \end_layout \begin_layout Code + # ip link set dev up \end_layout \begin_layout Code + # ip link set dev down \end_layout @@ -4808,10 +4978,12 @@ Example: \end_layout \begin_layout Code + # ip link set dev eth0 up \end_layout \begin_layout Code + # ip link set dev eth0 down \end_layout @@ -4825,10 +4997,12 @@ Usage: \end_layout \begin_layout Code + # /sbin/ifconfig up \end_layout \begin_layout Code + # /sbin/ifconfig down \end_layout @@ -4837,10 +5011,12 @@ Example: \end_layout \begin_layout Code + # /sbin/ifconfig eth0 up \end_layout \begin_layout Code + # /sbin/ifconfig eth0 down \end_layout @@ -4891,6 +5067,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 addr show dev \end_layout @@ -4899,22 +5076,27 @@ Example for a static configured host: \end_layout \begin_layout Code + # /sbin/ip -6 addr show dev eth0 \end_layout \begin_layout Code + 2: eth0: \end_layout @@ -4977,18 +5168,22 @@ Example (output filtered with grep to display only IPv6 addresses). \end_layout \begin_layout Code + # /sbin/ifconfig eth0 |grep "inet6 addr:" \end_layout \begin_layout Code + inet6 addr: fe80::210:a4ff:fee3:9566/10 Scope:Link \end_layout \begin_layout Code + inet6 addr: 2001:0db8:0:f101::1/64 Scope:Global \end_layout \begin_layout Code + inet6 addr: fec0:0:0:f101::1/64 Scope:Site \end_layout @@ -5010,6 +5205,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 addr add / dev \end_layout @@ -5018,6 +5214,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 addr add 2001:0db8:0:f101::1/64 dev eth0 \end_layout @@ -5031,6 +5228,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ifconfig inet6 add / \end_layout @@ -5039,6 +5237,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64 \end_layout @@ -5061,6 +5260,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 addr del / dev \end_layout @@ -5069,6 +5269,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 addr del 2001:0db8:0:f101::1/64 dev eth0 \end_layout @@ -5082,6 +5283,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ifconfig inet6 del / \end_layout @@ -5090,6 +5292,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ifconfig eth0 inet6 del 2001:0db8:0:f101::1/64 \end_layout @@ -5142,6 +5345,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 route show [dev ] \end_layout @@ -5151,22 +5355,27 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 route show dev eth0 \end_layout \begin_layout Code + 2001:0db8:0:f101::/64 proto kernel metric 256 mtu 1500 advmss 1440 \end_layout \begin_layout Code + fe80::/10 proto kernel metric 256 mtu 1500 advmss 1440 \end_layout \begin_layout Code + ff00::/8 proto kernel metric 256 mtu 1500 advmss 1440 \end_layout \begin_layout Code + default proto kernel metric 256 mtu 1500 advmss 1440 \end_layout @@ -5180,6 +5389,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/route -A inet6 \end_layout @@ -5191,34 +5401,42 @@ Example (output is filtered for interface eth0). \end_layout \begin_layout Code + # /sbin/route -A inet6 |grep -w "eth0" \end_layout \begin_layout Code + 2001:0db8:0:f101 ::/64 :: UA 256 0 0 eth0 <- Interface route for global \end_layout \begin_layout Code + ¬ address \end_layout \begin_layout Code + fe80::/10 :: UA 256 0 0 eth0 <- Interface route for link-local \end_layout \begin_layout Code + ¬ address \end_layout \begin_layout Code + ff00::/8 :: UA 256 0 0 eth0 <- Interface route for all multicast \end_layout \begin_layout Code + ¬ addresses \end_layout \begin_layout Code + ::/0 :: UDA 256 0 0 eth0 <- Automatic default route \end_layout @@ -5241,10 +5459,12 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 route add / via \end_layout \begin_layout Code + ¬ [dev ] \end_layout @@ -5253,6 +5473,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 route add default via 2001:0db8:0:f101::1 \end_layout @@ -5266,10 +5487,12 @@ Usage: \end_layout \begin_layout Code + # /sbin/route -A inet6 add / gw \end_layout \begin_layout Code + ¬ [dev ] \end_layout @@ -5287,6 +5510,7 @@ Following shown example adds a default route through gateway \end_layout \begin_layout Code + # /sbin/route -A inet6 add default gw 2001:0db8:0:f101::1 \end_layout @@ -5310,10 +5534,12 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 route del / via \end_layout \begin_layout Code + ¬ [dev ] \end_layout @@ -5322,6 +5548,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 route del default via 2001:0db8:0:f101::1 \end_layout @@ -5335,10 +5562,12 @@ Usage: \end_layout \begin_layout Code + # /sbin/route -A inet6 del / gw [dev \end_layout \begin_layout Code + ¬ ] \end_layout @@ -5347,6 +5576,7 @@ Example for removing upper added route again: \end_layout \begin_layout Code + # /sbin/route -A inet6 del default gw 2001:0db8:0:f101::1 \end_layout @@ -5369,10 +5599,12 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 route add / dev \end_layout \begin_layout Code + ¬ metric 1 \end_layout @@ -5381,6 +5613,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 route add default dev eth0 metric 1 \end_layout @@ -5423,6 +5656,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/route -A inet6 add / dev \end_layout @@ -5431,6 +5665,7 @@ Example: \end_layout \begin_layout Code + # /sbin/route -A inet6 add default dev eth0 \end_layout @@ -5453,6 +5688,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 route del / dev \end_layout @@ -5461,6 +5697,7 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 route del default dev eth0 \end_layout @@ -5474,6 +5711,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/route -A inet6 del / dev \end_layout @@ -5483,6 +5721,7 @@ Example: \end_layout \begin_layout Code + # /sbin/route -A inet6 del default dev eth0 \end_layout @@ -5521,14 +5760,17 @@ Client can setup a default route like prefix \end_layout \begin_layout Code + # ip -6 route show | grep ^default \end_layout \begin_layout Code + default via fe80::212:34ff:fe12:3450 dev eth0 proto kernel metric 1024 expires \end_layout \begin_layout Code + ¬ 29sec mtu 1500 advmss 1440 \end_layout @@ -5610,6 +5852,7 @@ With following command you can display the learnt or configured IPv6 neighbors \end_layout \begin_layout Code + # ip -6 neigh show [dev ] \end_layout @@ -5618,10 +5861,12 @@ The following example shows one neighbor, which is a reachable router \end_layout \begin_layout Code + # ip -6 neigh show \end_layout \begin_layout Code + fe80::201:23ff:fe45:6789 dev eth0 lladdr 00:01:23:45:67:89 router nud reachable \end_layout @@ -5646,6 +5891,7 @@ With following command you are able to manually add an entry \end_layout \begin_layout Code + # ip -6 neigh add lladdr dev \end_layout @@ -5654,6 +5900,7 @@ Example: \end_layout \begin_layout Code + # ip -6 neigh add fec0::1 lladdr 02:01:02:03:04:05 dev eth0 \end_layout @@ -5666,6 +5913,7 @@ Like adding also an entry can be deleted: \end_layout \begin_layout Code + # ip -6 neigh del lladdr dev \end_layout @@ -5674,6 +5922,7 @@ Example: \end_layout \begin_layout Code + # ip -6 neigh del fec0::1 lladdr 02:01:02:03:04:05 dev eth0 \end_layout @@ -5703,23 +5952,28 @@ help \end_layout \begin_layout Code + # ip -6 neigh help \end_layout \begin_layout Code + Usage: ip neigh { add | del | change | replace } { ADDR [ lladdr LLADDR ] \end_layout \begin_layout Code + [ nud { permanent | noarp | stale | reachable } ] \end_layout \begin_layout Code + | proxy ADDR } [ dev DEV ] \end_layout \begin_layout Code + ip neigh {show|flush} [ to PREFIX ] [ dev DEV ] [ nud STATE ] \end_layout @@ -5909,22 +6163,27 @@ target "http://www.faqs.org/rfcs/rfc3056.html" \end_layout \begin_layout Code + | 3+13 | 32 | 16 | 64 bits | \end_layout \begin_layout Code + +---+------+-----------+--------+--------------------------------+ \end_layout \begin_layout Code + | FP+TLA | V4ADDR | SLA ID | Interface ID | \end_layout \begin_layout Code + | 0x2002 | | | | \end_layout \begin_layout Code + +---+------+-----------+--------+--------------------------------+ \end_layout @@ -6135,6 +6394,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 tunnel show [] \end_layout @@ -6143,14 +6403,17 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 tunnel show \end_layout \begin_layout Code + sit0: ipv6/ip remote any local any ttl 64 nopmtudisc \end_layout \begin_layout Code + sit1: ipv6/ip remote 195.226.187.50 local any ttl 64 \end_layout @@ -6163,6 +6426,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/route -A inet6 \end_layout @@ -6172,6 +6436,7 @@ Example (output is filtered to display only tunnels through virtual interface \end_layout \begin_layout Code + # /sbin/route -A inet6 | grep " \backslash Wsit0 @@ -6180,22 +6445,27 @@ W*$" \end_layout \begin_layout Code + ::/96 :: U 256 2 0 sit0 \end_layout \begin_layout Code + 2002::/16 :: UA 256 0 0 sit0 \end_layout \begin_layout Code + 2000::/3 ::193.113.58.75 UG 1 0 0 sit0 \end_layout \begin_layout Code + fe80::/10 :: UA 256 0 0 sit0 \end_layout \begin_layout Code + ff00::/8 :: UA 256 0 0 sit0 \end_layout @@ -6261,10 +6531,12 @@ Usage for creating a tunnel device (but it's not up afterward, also a TTL \end_layout \begin_layout Code + # /sbin/ip tunnel add mode sit ttl remote \end_layout \begin_layout Code + ¬ local \end_layout @@ -6273,18 +6545,22 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip tunnel add sit1 mode sit ttl remote \end_layout \begin_layout Code + ¬ local \end_layout \begin_layout Code + # /sbin/ip link set dev sit1 up \end_layout \begin_layout Code + # /sbin/ip -6 route add dev sit1 metric 1 \end_layout @@ -6293,18 +6569,22 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip tunnel add sit2 mode sit ttl \end_layout \begin_layout Code + ¬ local \end_layout \begin_layout Code + # /sbin/ip link set dev sit2 up \end_layout \begin_layout Code + # /sbin/ip -6 route add dev sit2 metric 1 \end_layout @@ -6313,18 +6593,22 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip tunnel add sit3 mode sit ttl \end_layout \begin_layout Code + ¬ local \end_layout \begin_layout Code + # /sbin/ip link set dev sit3 up \end_layout \begin_layout Code + # /sbin/ip -6 route add dev sit3 metric 1 \end_layout @@ -6345,6 +6629,7 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ifconfig sit0 up \end_layout @@ -6353,14 +6638,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ifconfig sit0 tunnel \end_layout \begin_layout Code + # /sbin/ifconfig sit1 up \end_layout \begin_layout Code + # /sbin/route -A inet6 add dev sit1 \end_layout @@ -6369,14 +6657,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ifconfig sit0 tunnel \end_layout \begin_layout Code + # /sbin/ifconfig sit2 up \end_layout \begin_layout Code + # /sbin/route -A inet6 add dev sit2 \end_layout @@ -6385,14 +6676,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ifconfig sit0 tunnel \end_layout \begin_layout Code + # /sbin/ifconfig sit3 up \end_layout \begin_layout Code + # /sbin/route -A inet6 add dev sit3 \end_layout @@ -6418,6 +6712,7 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ifconfig sit0 up \end_layout @@ -6426,26 +6721,32 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/route -A inet6 add gw \end_layout \begin_layout Code + ¬ :: dev sit0 \end_layout \begin_layout Code + # /sbin/route -A inet6 add gw \end_layout \begin_layout Code + ¬ :: dev sit0 \end_layout \begin_layout Code + # /sbin/route -A inet6 add gw \end_layout \begin_layout Code + ¬ :: dev sit0 \end_layout @@ -6474,6 +6775,7 @@ Usage for removing a tunnel device: \end_layout \begin_layout Code + # /sbin/ip tunnel del \end_layout @@ -6482,14 +6784,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 route del dev sit1 \end_layout \begin_layout Code + # /sbin/ip link set sit1 down \end_layout \begin_layout Code + # /sbin/ip tunnel del sit1 \end_layout @@ -6498,14 +6803,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 route del dev sit2 \end_layout \begin_layout Code + # /sbin/ip link set sit2 down \end_layout \begin_layout Code + # /sbin/ip tunnel del sit2 \end_layout @@ -6514,14 +6822,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 route del dev sit3 \end_layout \begin_layout Code + # /sbin/ip link set sit3 down \end_layout \begin_layout Code + # /sbin/ip tunnel del sit3 \end_layout @@ -6540,10 +6851,12 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/route -A inet6 del dev sit3 \end_layout \begin_layout Code + # /sbin/ifconfig sit3 down \end_layout @@ -6552,10 +6865,12 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/route -A inet6 del dev sit2 \end_layout \begin_layout Code + # /sbin/ifconfig sit2 down \end_layout @@ -6564,10 +6879,12 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/route -A inet6 add dev sit1 \end_layout \begin_layout Code + # /sbin/ifconfig sit1 down \end_layout @@ -6576,6 +6893,7 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ifconfig sit0 down \end_layout @@ -6597,26 +6915,32 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/route -A inet6 del gw \end_layout \begin_layout Code + ¬ :: dev sit0 \end_layout \begin_layout Code + # /sbin/route -A inet6 del gw \end_layout \begin_layout Code + ¬ :: dev sit0 \end_layout \begin_layout Code + # /sbin/route -A inet6 del gw \end_layout \begin_layout Code + ¬ :: dev sit0 \end_layout @@ -6625,6 +6949,7 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ifconfig sit0 down \end_layout @@ -6683,6 +7008,7 @@ Assuming your IPv4 address is \end_layout \begin_layout Code + 1.2.3.4 \end_layout @@ -6691,6 +7017,7 @@ the generated 6to4 prefix will be \end_layout \begin_layout Code + 2002:0102:0304:: \end_layout @@ -6709,6 +7036,7 @@ Local 6to4 gateways should (but it's not a must, you can choose an arbitrary \end_layout \begin_layout Code + 2002:0102:0304::1 \end_layout @@ -6718,6 +7046,7 @@ Use e.g. \end_layout \begin_layout Code + ipv4="1.2.3.4"; printf "2002:%02x%02x:%02x%02x::1" `echo $ipv4 | tr "." " "` \end_layout @@ -6739,10 +7068,12 @@ Create a new tunnel device \end_layout \begin_layout Code + # /sbin/ip tunnel add tun6to4 mode sit ttl remote any local \end_layout \begin_layout Code + ¬ \end_layout @@ -6751,6 +7082,7 @@ Bring interface up \end_layout \begin_layout Code + # /sbin/ip link set dev tun6to4 up \end_layout @@ -6759,6 +7091,7 @@ Add local 6to4 address to interface (note: prefix length 16 is important!) \end_layout \begin_layout Code + # /sbin/ip -6 addr add /16 dev tun6to4 \end_layout @@ -6768,6 +7101,7 @@ Add (default) route to the global IPv6 network using the all-6to4-routers \end_layout \begin_layout Code + # /sbin/ip -6 route add default via ::192.88.99.1 dev tun6to4 metric 1 \end_layout @@ -6786,6 +7120,7 @@ ip \end_layout \begin_layout Code + # /sbin/ip -6 route add default via 2002:c058:6301::1 dev tun6to4 metric 1 \end_layout @@ -6812,6 +7147,7 @@ Bring generic tunnel interface sit0 up \end_layout \begin_layout Code + # /sbin/ifconfig sit0 up \end_layout @@ -6820,6 +7156,7 @@ Add local 6to4 address to interface \end_layout \begin_layout Code + # /sbin/ifconfig sit0 add /16 \end_layout @@ -6829,6 +7166,7 @@ Add (default) route to the global IPv6 network using the all-6to4-relays \end_layout \begin_layout Code + # /sbin/route -A inet6 add default gw ::192.88.99.1 dev sit0 \end_layout @@ -6845,6 +7183,7 @@ Remove all routes through this dedicated tunnel device \end_layout \begin_layout Code + # /sbin/ip -6 route flush dev tun6to4 \end_layout @@ -6853,6 +7192,7 @@ Shut down interface \end_layout \begin_layout Code + # /sbin/ip link set dev tun6to4 down \end_layout @@ -6861,6 +7201,7 @@ Remove created tunnel device \end_layout \begin_layout Code + # /sbin/ip tunnel del tun6to4 \end_layout @@ -6897,6 +7238,7 @@ Remove (default) route through the 6to4 tunnel interface \end_layout \begin_layout Code + # /sbin/route -A inet6 del default gw ::192.88.99.1 dev sit0 \end_layout @@ -6905,6 +7247,7 @@ Remove local 6to4 address to interface \end_layout \begin_layout Code + # /sbin/ifconfig sit0 del /16 \end_layout @@ -6914,6 +7257,7 @@ Shut down generic tunnel device (take care about this, perhaps it's still \end_layout \begin_layout Code + # /sbin/ifconfig sit0 down \end_layout @@ -6953,6 +7297,7 @@ Usage: \end_layout \begin_layout Code + # /sbin/ip -6 tunnel show [] \end_layout @@ -6961,23 +7306,28 @@ Example: \end_layout \begin_layout Code + # /sbin/ip -6 tunnel show mode any \end_layout \begin_layout Code + ip6tnl0: ipv6/ipv6 remote :: local :: encaplimit 0 hoplimit 0 tclass 0x00 \end_layout \begin_layout Code + ¬ flowlabel 0x00000 (flowinfo 0x00000000) \end_layout \begin_layout Code + ip6tnl1: ip/ipv6 remote fd00:0:0:2::a local fd00:0:0:2::1 dev eth1 encaplimit 4 \end_layout \begin_layout Code + ¬ hoplimit 64 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000) \end_layout @@ -6994,10 +7344,12 @@ Usage for creating a 4over6 tunnel device (but it's not up afterward) \end_layout \begin_layout Code + # /sbin/ip tunnel add mode ip4ip6 remote \end_layout \begin_layout Code + ¬ local \end_layout @@ -7006,18 +7358,22 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 tunnel add ip6tnl1 mode ip4ip6 remote \end_layout \begin_layout Code + ¬ local \end_layout \begin_layout Code + # /sbin/ip link set dev ip6tnl1 up \end_layout \begin_layout Code + # /sbin/ip -6 route add dev ip6tnl1 metric 1 \end_layout @@ -7026,18 +7382,22 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 tunnel add ip6tnl2 mode ip4ip6 remote \end_layout \begin_layout Code + ¬ local \end_layout \begin_layout Code + # /sbin/ip link set dev ip6tnl2 up \end_layout \begin_layout Code + # /sbin/ip -6 route add dev ip6tnl2 metric 1 \end_layout @@ -7046,18 +7406,22 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 tunnel add ip6tnl3 mode ip4ip6 remote \end_layout \begin_layout Code + ¬ local \end_layout \begin_layout Code + # /sbin/ip link set dev ip6tnl3 up \end_layout \begin_layout Code + # /sbin/ip -6 route add dev ip6tnl3 metric 1 \end_layout @@ -7070,6 +7434,7 @@ Usage for removing a tunnel device: \end_layout \begin_layout Code + # /sbin/ip -6 tunnel del \end_layout @@ -7078,14 +7443,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 route del dev ip6tnl1 \end_layout \begin_layout Code + # /sbin/ip link set ip6tnl1 down \end_layout \begin_layout Code + # /sbin/ip -6 tunnel del ip6tnl1 \end_layout @@ -7094,14 +7462,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 route del dev ip6tnl2 \end_layout \begin_layout Code + # /sbin/ip link set ip6tnl2 down \end_layout \begin_layout Code + # /sbin/ip -6 tunnel del ip6tnl2 \end_layout @@ -7110,14 +7481,17 @@ Usage (generic example for three tunnels): \end_layout \begin_layout Code + # /sbin/ip -6 route del dev ip6tnl3 \end_layout \begin_layout Code + # /sbin/ip link set ip6tnl3 down \end_layout \begin_layout Code + # /sbin/ip -6 tunnel del ip6tnl3 \end_layout @@ -7210,6 +7584,7 @@ The /proc-filesystem had to be enabled in kernel, means on compiling following \end_layout \begin_layout Code + CONFIG_PROC_FS=y \end_layout @@ -7218,10 +7593,12 @@ The /proc-filesystem was mounted before, which can be tested using \end_layout \begin_layout Code + # mount | grep "type proc" \end_layout \begin_layout Code + none on /proc type proc (rw) \end_layout @@ -7252,10 +7629,12 @@ cat \end_layout \begin_layout Code + # cat /proc/sys/net/ipv6/conf/all/forwarding \end_layout \begin_layout Code + 0 \end_layout @@ -7276,6 +7655,7 @@ echo \end_layout \begin_layout Code + # echo "1" >/proc/sys/net/ipv6/conf/all/forwarding \end_layout @@ -7331,6 +7711,7 @@ The sysctl-interface had to be enabled in kernel, means on compiling following \end_layout \begin_layout Code + CONFIG_SYSCTL=y \end_layout @@ -7343,10 +7724,12 @@ The value of an entry can be retrieved now: \end_layout \begin_layout Code + # sysctl net.ipv6.conf.all.forwarding \end_layout \begin_layout Code + net.ipv6.conf.all.forwarding = 0 \end_layout @@ -7359,10 +7742,12 @@ A new value can be set (if entry is writable): \end_layout \begin_layout Code + # sysctl -w net.ipv6.conf.all.forwarding=1 \end_layout \begin_layout Code + net.ipv6.conf.all.forwarding = 1 \end_layout @@ -7380,10 +7765,12 @@ Note: Don't use spaces around the \end_layout \begin_layout Code + # sysctl -w net.ipv4.ip_local_port_range="32768 61000" \end_layout \begin_layout Code + net.ipv4.ip_local_port_range = 32768 61000 \end_layout @@ -7851,10 +8238,12 @@ target "http://www.zebra.org/" \end_layout \begin_layout Code + ZEBRA: netlink-listen error: No buffer space available, type=RTM_NEWROUTE(24), \end_layout \begin_layout Code + ¬ seq=426, pid=0 \end_layout @@ -8326,22 +8715,27 @@ net/ipv6/addrconf.c \end_layout \begin_layout Code + # cat /proc/net/if_inet6 \end_layout \begin_layout Code + 00000000000000000000000000000001 01 80 10 80 lo \end_layout \begin_layout Code + +------------------------------+ ++ ++ ++ ++ ++ \end_layout \begin_layout Code + | | | | | | \end_layout \begin_layout Code + 1 2 3 4 5 6 \end_layout @@ -8432,22 +8826,27 @@ net/ipv6/route.c \end_layout \begin_layout Code + # cat /proc/net/ipv6_route \end_layout \begin_layout Code + 00000000000000000000000000000000 00 00000000000000000000000000000000 00 \end_layout \begin_layout Code + +------------------------------+ ++ +------------------------------+ ++ \end_layout \begin_layout Code + | | | | \end_layout \begin_layout Code + 1 2 3 4 \end_layout @@ -8456,18 +8855,22 @@ net/ipv6/route.c \end_layout \begin_layout Code + ¬ 00000000000000000000000000000000 ffffffff 00000001 00000001 00200200 lo \end_layout \begin_layout Code + ¬ +------------------------------+ +------+ +------+ +------+ +------+ ++ \end_layout \begin_layout Code + ¬ | | | | | | \end_layout \begin_layout Code + ¬ 5 6 7 8 9 10 \end_layout @@ -8527,22 +8930,27 @@ Statistics about used IPv6 sockets. \end_layout \begin_layout Code + # cat /proc/net/sockstat6 \end_layout \begin_layout Code + TCP6: inuse 7 \end_layout \begin_layout Code + UDP6: inuse 2 \end_layout \begin_layout Code + RAW6: inuse 1 \end_layout \begin_layout Code + FRAG6: inuse 0 memory 0 \end_layout @@ -8724,307 +9132,375 @@ Example: \end_layout \begin_layout Code + # netstat -nlptu \end_layout \begin_layout Code + Active Internet connections (only servers) \end_layout \begin_layout Code + Proto Recv-Q Send-Q Local Address Foreign Address State \end_layout \begin_layout Code + ¬ PID/Program name \end_layout \begin_layout Code + tcp 0 0 0.0.0.0:32768 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 1258/rpc.statd \end_layout \begin_layout Code + tcp 0 0 0.0.0.0:32769 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 1502/rpc.mountd \end_layout \begin_layout Code + tcp 0 0 0.0.0.0:515 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 22433/lpd Waiting \end_layout \begin_layout Code + tcp 0 0 1.2.3.1:139 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 1746/smbd \end_layout \begin_layout Code + tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 1230/portmap \end_layout \begin_layout Code + tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 3551/X \end_layout \begin_layout Code + tcp 0 0 1.2.3.1:8081 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 18735/junkbuster \end_layout \begin_layout Code + tcp 0 0 1.2.3.1:3128 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 18822/(squid) \end_layout \begin_layout Code + tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN \end_layout \begin_layout Code + ¬ 30734/named \end_layout \begin_layout Code + tcp 0 0 ::ffff:1.2.3.1:993 :::* LISTEN \end_layout \begin_layout Code + ¬ 6742/xinetd-ipv6 \end_layout \begin_layout Code + tcp 0 0 :::13 :::* LISTEN \end_layout \begin_layout Code + ¬ 6742/xinetd-ipv6 \end_layout \begin_layout Code + tcp 0 0 ::ffff:1.2.3.1:143 :::* LISTEN \end_layout \begin_layout Code + ¬ 6742/xinetd-ipv6 \end_layout \begin_layout Code + tcp 0 0 :::53 :::* LISTEN \end_layout \begin_layout Code + ¬ 30734/named \end_layout \begin_layout Code + tcp 0 0 :::22 :::* LISTEN \end_layout \begin_layout Code + ¬ 1410/sshd \end_layout \begin_layout Code + tcp 0 0 :::6010 :::* LISTEN \end_layout \begin_layout Code + ¬ 13237/sshd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:32768 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1258/rpc.statd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:2049 0.0.0.0:* \end_layout \begin_layout Code + ¬ - \end_layout \begin_layout Code + udp 0 0 0.0.0.0:32770 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1502/rpc.mountd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:32771 0.0.0.0:* \end_layout \begin_layout Code + ¬ - \end_layout \begin_layout Code + udp 0 0 1.2.3.1:137 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1751/nmbd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:137 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1751/nmbd \end_layout \begin_layout Code + udp 0 0 1.2.3.1:138 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1751/nmbd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:138 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1751/nmbd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:33044 0.0.0.0:* \end_layout \begin_layout Code + ¬ 30734/named \end_layout \begin_layout Code + udp 0 0 1.2.3.1:53 0.0.0.0:* \end_layout \begin_layout Code + ¬ 30734/named \end_layout \begin_layout Code + udp 0 0 127.0.0.1:53 0.0.0.0:* \end_layout \begin_layout Code + ¬ 30734/named \end_layout \begin_layout Code + udp 0 0 0.0.0.0:67 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1530/dhcpd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:67 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1530/dhcpd \end_layout \begin_layout Code + udp 0 0 0.0.0.0:32858 0.0.0.0:* \end_layout \begin_layout Code + ¬ 18822/(squid) \end_layout \begin_layout Code + udp 0 0 0.0.0.0:4827 0.0.0.0:* \end_layout \begin_layout Code + ¬ 18822/(squid) \end_layout \begin_layout Code + udp 0 0 0.0.0.0:111 0.0.0.0:* \end_layout \begin_layout Code + ¬ 1230/portmap \end_layout \begin_layout Code + udp 0 0 :::53 :::* \end_layout \begin_layout Code + ¬ 30734/named \end_layout @@ -9056,26 +9532,32 @@ Router advertisement \end_layout \begin_layout Code + 15:43:49.484751 fe80::212:34ff:fe12:3450 > ff02::1: icmp6: router \end_layout \begin_layout Code + ¬ advertisement(chlim=64, router_ltime=30, reachable_time=0, \end_layout \begin_layout Code + ¬ retrans_time=0)(prefix info: AR valid_ltime=30, preffered_ltime=20, \end_layout \begin_layout Code + ¬ prefix=2002:0102:0304:1::/64)(prefix info: LAR valid_ltime=2592000, \end_layout \begin_layout Code + ¬ preffered_ltime=604800, prefix=2001:0db8:0:1::/64)(src lladdr: \end_layout \begin_layout Code + ¬ 0:12:34:12:34:50) (len 88, hlim 255) \end_layout @@ -9128,10 +9610,12 @@ Router solicitation \end_layout \begin_layout Code + 15:44:21.152646 fe80::212:34ff:fe12:3456 > ff02::2: icmp6: router solicitation \end_layout \begin_layout Code + ¬ (src lladdr: 0:12:34:12:34:56) (len 16, hlim 255) \end_layout @@ -9199,10 +9683,12 @@ fe80::212:34ff:fe12:3456 \end_layout \begin_layout Code + 15:44:17.712338 :: > ff02::1:ff12:3456: icmp6: neighbor sol: who has \end_layout \begin_layout Code + ¬ fe80::212:34ff:fe12:3456(src lladdr: 0:12:34:12:34:56) (len 32, hlim 255) \end_layout @@ -9219,15 +9705,18 @@ Node wants to configure its global address \end_layout \begin_layout Code + 15:44:21.905596 :: > ff02::1:ff12:3456: icmp6: neighbor sol: who has \end_layout \begin_layout Code + ¬ 2002:0102:0304:1:212:34ff:fe12:3456(src lladdr: 0:12:34:12:34:56) (len 32, \end_layout \begin_layout Code + ¬ hlim 255) \end_layout @@ -9244,15 +9733,18 @@ Node wants to configure its global address \end_layout \begin_layout Code + 15:44:22.304028 :: > ff02::1:ff12:3456: icmp6: neighbor sol: who has \end_layout \begin_layout Code + ¬ 2001:0db8:0:1:212:34ff:fe12:3456(src lladdr: 0:12:34:12:34:56) (len 32, hlim \end_layout \begin_layout Code + ¬ 255) \end_layout @@ -9273,15 +9765,18 @@ Node wants to send packages to \end_layout \begin_layout Code + 13:07:47.664538 2002:0102:0304:1:2e0:18ff:fe90:9205 > ff02::1:ff00:10: icmp6: \end_layout \begin_layout Code + ¬ neighbor sol: who has 2001:0db8:0:1::10(src lladdr: 0:e0:18:90:92:5) (len 32, \end_layout \begin_layout Code + ¬ hlim 255) \end_layout @@ -9298,10 +9793,12 @@ fe80::10 \end_layout \begin_layout Code + 13:11:20.870070 fe80::2e0:18ff:fe90:9205 > ff02::1:ff00:10: icmp6: neighbor \end_layout \begin_layout Code + ¬ sol: who has fe80::10(src lladdr: 0:e0:18:90:92:5) (len 32, hlim 255) \end_layout @@ -9423,6 +9920,7 @@ You can test, whether your Linux distribution contain support for persistent \end_layout \begin_layout Code + /etc/sysconfig/network-scripts/network-functions-ipv6 \end_layout @@ -9431,11 +9929,13 @@ Auto-magically test: \end_layout \begin_layout Code + # test -f /etc/sysconfig/network-scripts/network-functions-ipv6 && echo "Main \end_layout \begin_layout Code + ¬ IPv6 script library exists" \end_layout @@ -9445,14 +9945,17 @@ The version of the library is important if you miss some features. \end_layout \begin_layout Code + # source /etc/sysconfig/network-scripts/network-functions-ipv6 && \end_layout \begin_layout Code + ¬ getversion_ipv6_functions \end_layout \begin_layout Code + 20011124 \end_layout @@ -9491,10 +9994,12 @@ Check whether running system has already IPv6 module loaded \end_layout \begin_layout Code + # modprobe -c | grep net-pf-10 \end_layout \begin_layout Code + alias net-pf-10 off \end_layout @@ -9512,6 +10017,7 @@ off \end_layout \begin_layout Code + NETWORKING_IPV6=yes \end_layout @@ -9520,6 +10026,7 @@ Reboot or restart networking using \end_layout \begin_layout Code + # service network restart \end_layout @@ -9528,10 +10035,12 @@ Now IPv6 module should be loaded \end_layout \begin_layout Code + # modprobe -c | grep ipv6 \end_layout \begin_layout Code + alias net-pf-10 ipv6 \end_layout @@ -9591,6 +10100,7 @@ Edit file /etc/sysconfig/network/ifcfg- and setup following \end_layout \begin_layout Code + IP6ADDR="/" \end_layout @@ -9616,6 +10126,7 @@ Edit file /etc/sysconfig/network/ifcfg- and setup following \end_layout \begin_layout Code + IPADDR="/" \end_layout @@ -9656,44 +10167,54 @@ Configure your interface. \end_layout \begin_layout Code + iface eth0 inet6 static \end_layout \begin_layout Code + pre-up modprobe ipv6 \end_layout \begin_layout Code + address 2001:0db8:1234:5::1:1 \end_layout \begin_layout Code + # To suppress completely autoconfiguration: \end_layout \begin_layout Code + # up echo 0 > /proc/sys/net/ipv6/conf/all/autoconf \end_layout \begin_layout Code + netmask 64 \end_layout \begin_layout Code + # The router is autoconfigured and has no fixed address. \end_layout \begin_layout Code + # It is magically \end_layout \begin_layout Code + # found. (/proc/sys/net/ipv6/conf/all/accept_ra). Otherwise: \end_layout \begin_layout Code + #gateway 2001:0db8:1234:5::1 \end_layout @@ -9702,6 +10223,7 @@ And you reboot or you just \end_layout \begin_layout Code + # ifup --force eth0 \end_layout @@ -9772,18 +10294,22 @@ Example: \end_layout \begin_layout Code + # ip -6 addr show dev eth0 scope link \end_layout \begin_layout Code + 2: eth0: mtu 1500 qlen1000 \end_layout \begin_layout Code + inet6 fe80::211:d8ff:fe6b:f0f5/64 scope link \end_layout \begin_layout Code + valid_lft forever preferred_lft forever \end_layout @@ -10294,6 +10820,7 @@ Change to source directory: \end_layout \begin_layout Code + # cd /path/to/src \end_layout @@ -10302,10 +10829,12 @@ Unpack and rename kernel sources \end_layout \begin_layout Code + # tar z|jxf kernel-version.tar.gz|bz2 \end_layout \begin_layout Code + # mv linux linux-version-iptables-version+IPv6 \end_layout @@ -10314,6 +10843,7 @@ Unpack iptables sources \end_layout \begin_layout Code + # tar z|jxf iptables-version.tar.gz|bz2 \end_layout @@ -10326,6 +10856,7 @@ Change to iptables directory \end_layout \begin_layout Code + # cd iptables-version \end_layout @@ -10334,6 +10865,7 @@ Apply pending patches \end_layout \begin_layout Code + # make pending-patches KERNEL_DIR=/path/to/src/linux-version-iptables-version/ \end_layout @@ -10344,6 +10876,7 @@ Apply additional IPv6 related patches (still not in the vanilla kernel included) \end_layout \begin_layout Code + # make patch-o-matic KERNEL_DIR=/path/to/src/linux-version-iptables-version/ \end_layout @@ -10382,10 +10915,12 @@ Check IPv6 extensions \end_layout \begin_layout Code + # make print-extensions \end_layout \begin_layout Code + Extensions found: IPv6:owner IPv6:limit IPv6:mac IPv6:multiport \end_layout @@ -10398,6 +10933,7 @@ Change to kernel sources \end_layout \begin_layout Code + # cd /path/to/src/linux-version-iptables-version/ \end_layout @@ -10406,10 +10942,12 @@ Edit Makefile \end_layout \begin_layout Code + - EXTRAVERSION = \end_layout \begin_layout Code + + EXTRAVERSION = -iptables-version+IPv6-try \end_layout @@ -10418,80 +10956,99 @@ Run configure, enable IPv6 related \end_layout \begin_layout Code + Code maturity level options \end_layout \begin_layout Code + Prompt for development and/or incomplete code/drivers : yes \end_layout \begin_layout Code + Networking options \end_layout \begin_layout Code + Network packet filtering: yes \end_layout \begin_layout Code + The IPv6 protocol: module \end_layout \begin_layout Code + IPv6: Netfilter Configuration \end_layout \begin_layout Code + IP6 tables support: module \end_layout \begin_layout Code + All new options like following: \end_layout \begin_layout Code + limit match support: module \end_layout \begin_layout Code + MAC address match support: module \end_layout \begin_layout Code + Multiple port match support: module \end_layout \begin_layout Code + Owner match support: module \end_layout \begin_layout Code + netfilter MARK match support: module \end_layout \begin_layout Code + Aggregated address check: module \end_layout \begin_layout Code + Packet filtering: module \end_layout \begin_layout Code + REJECT target support: module \end_layout \begin_layout Code + LOG target support: module \end_layout \begin_layout Code + Packet mangling: module \end_layout \begin_layout Code + MARK target support: module \end_layout @@ -10518,6 +11075,7 @@ Rename older directory \end_layout \begin_layout Code + # mv /usr/src/linux /usr/src/linux.old \end_layout @@ -10526,6 +11084,7 @@ Create a new softlink \end_layout \begin_layout Code + # ln -s /path/to/src/linux-version-iptables-version /usr/src/linux \end_layout @@ -10534,6 +11093,7 @@ Rebuild SRPMS \end_layout \begin_layout Code + # rpm --rebuild /path/to/SRPMS/iptables-version-release.src.rpm \end_layout @@ -10547,6 +11107,7 @@ On RH 7.1 systems, normally, already an older version is installed, therefore \end_layout \begin_layout Code + # rpm -Fhv /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm \end_layout @@ -10555,6 +11116,7 @@ If not already installed, use "install" \end_layout \begin_layout Code + # rpm -ihv /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm \end_layout @@ -10565,6 +11127,7 @@ ts don't fit. \end_layout \begin_layout Code + # rpm -ihv --nodeps /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm \end_layout @@ -10574,6 +11137,7 @@ Perhaps it's necessary to create a softlink for iptables libraries where \end_layout \begin_layout Code + # ln -s /lib/iptables/ /usr/lib/iptables \end_layout @@ -10590,6 +11154,7 @@ Load module, if so compiled \end_layout \begin_layout Code + # modprobe ip6_tables \end_layout @@ -10598,10 +11163,12 @@ Check for capability \end_layout \begin_layout Code + # [ ! -f /proc/net/ip6_tables_names ] && echo "Current kernel doesn't support \end_layout \begin_layout Code + ¬ 'ip6tables' firewalling (IPv6)!" \end_layout @@ -10618,6 +11185,7 @@ Short \end_layout \begin_layout Code + # ip6tables -L \end_layout @@ -10626,6 +11194,7 @@ Extended \end_layout \begin_layout Code + # ip6tables -n -v --line-numbers -L \end_layout @@ -10634,6 +11203,7 @@ List specified filter \end_layout \begin_layout Code + # ip6tables -n -v --line-numbers -L INPUT \end_layout @@ -10642,10 +11212,12 @@ Insert a log rule at the input filter with options \end_layout \begin_layout Code + # ip6tables --table filter --append INPUT -j LOG --log-prefix "INPUT:" \end_layout \begin_layout Code + ¬ --log-level 7 \end_layout @@ -10654,6 +11226,7 @@ Insert a drop rule at the input filter \end_layout \begin_layout Code + # ip6tables --table filter --append INPUT -j DROP \end_layout @@ -10662,6 +11235,7 @@ Delete a rule by number \end_layout \begin_layout Code + # ip6tables --table filter --delete INPUT 1 \end_layout @@ -10675,6 +11249,7 @@ Since kernel version 2.6.20 IPv6 connection tracking is well supported and \end_layout \begin_layout Code + # ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT \end_layout @@ -10692,6 +11267,7 @@ Accept incoming ICMPv6 through tunnels \end_layout \begin_layout Code + # ip6tables -A INPUT -i sit+ -p icmpv6 -j ACCEPT \end_layout @@ -10700,6 +11276,7 @@ Allow outgoing ICMPv6 through tunnels \end_layout \begin_layout Code + # ip6tables -A OUTPUT -o sit+ -p icmpv6 -j ACCEPT \end_layout @@ -10708,6 +11285,7 @@ Newer kernels allow specifying of ICMPv6 types: \end_layout \begin_layout Code + # ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT \end_layout @@ -10725,10 +11303,12 @@ Because it can happen (author already saw it to times) that an ICMPv6 storm \end_layout \begin_layout Code + # ip6tables -A INPUT --protocol icmpv6 --icmpv6-type echo-request \end_layout \begin_layout Code + ¬ -j ACCEPT --match limit --limit 30/minute \end_layout @@ -10746,10 +11326,12 @@ Allow incoming SSH from 2001:0db8:100::1/128 \end_layout \begin_layout Code + # ip6tables -A INPUT -i sit+ -p tcp -s 2001:0db8:100::1/128 --sport 512:65535 \end_layout \begin_layout Code + ¬ --dport 22 -j ACCEPT \end_layout @@ -10762,10 +11344,12 @@ no longer needed if connection tracking is used! \end_layout \begin_layout Code + # ip6tables -A OUTPUT -o sit+ -p tcp -d 2001:0db8:100::1/128 --dport 512:65535 \end_layout \begin_layout Code + ¬ --sport 22 ! --syn -j ACCEPT \end_layout @@ -10787,6 +11371,7 @@ Accept incoming IPv6-in-IPv4 on interface ppp0 \end_layout \begin_layout Code + # iptables -A INPUT -i ppp0 -p ipv6 -j ACCEPT \end_layout @@ -10795,6 +11380,7 @@ Allow outgoing IPv6-in-IPv4 to interface ppp0 \end_layout \begin_layout Code + # iptables -A OUTPUT -o ppp0 -p ipv6 -j ACCEPT \end_layout @@ -10808,6 +11394,7 @@ Accept incoming IPv6-in-IPv4 on interface ppp0 from tunnel endpoint 192.0.2.2 \end_layout \begin_layout Code + # iptables -A INPUT -i ppp0 -p ipv6 -s 192.0.2.2 -j ACCEPT \end_layout @@ -10816,6 +11403,7 @@ Allow outgoing IPv6-in-IPv4 to interface ppp0 to tunnel endpoint 192.0.2.2 \end_layout \begin_layout Code + # iptables -A OUTPUT -o ppp0 -p ipv6 -d 192.0.2.2 -j ACCEPT \end_layout @@ -10838,6 +11426,7 @@ Block incoming TCP connection requests to this host \end_layout \begin_layout Code + # ip6tables -I INPUT -i sit+ -p tcp --syn -j DROP \end_layout @@ -10846,6 +11435,7 @@ Block incoming TCP connection requests to hosts behind this router \end_layout \begin_layout Code + # ip6tables -I FORWARD -i sit+ -p tcp --syn -j DROP \end_layout @@ -10878,6 +11468,7 @@ Block incoming UDP packets which cannot be responses of outgoing requests \end_layout \begin_layout Code + # ip6tables -I INPUT -i sit+ -p udp ! --dport 32768:60999 -j DROP \end_layout @@ -10887,6 +11478,7 @@ Block incoming UDP packets which cannot be responses of forwarded requests \end_layout \begin_layout Code + # ip6tables -I FORWARD -i sit+ -p udp ! --dport 32768:60999 -j DROP \end_layout @@ -10914,6 +11506,7 @@ tracking \end_layout \begin_layout Code + File: /etc/sysconfig/ip6tables \end_layout @@ -10922,70 +11515,87 @@ File: /etc/sysconfig/ip6tables \end_layout \begin_layout Code + *filter :INPUT ACCEPT [0:0] \end_layout \begin_layout Code + :FORWARD ACCEPT [0:0] \end_layout \begin_layout Code + :OUTPUT ACCEPT [0:0] \end_layout \begin_layout Code + :RH-Firewall-1-INPUT - [0:0] \end_layout \begin_layout Code + -A INPUT -j RH-Firewall-1-INPUT \end_layout \begin_layout Code + -A FORWARD -j RH-Firewall-1-INPUT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -i lo -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p 50 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p 51 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited \end_layout \begin_layout Code + COMMIT \end_layout @@ -10994,6 +11604,7 @@ For completeness also the IPv4 configuration is shown here: \end_layout \begin_layout Code + File: /etc/sysconfig/iptables \end_layout @@ -11002,71 +11613,88 @@ File: /etc/sysconfig/iptables \end_layout \begin_layout Code + *filter :INPUT ACCEPT [0:0] \end_layout \begin_layout Code + :FORWARD ACCEPT [0:0] \end_layout \begin_layout Code + :OUTPUT ACCEPT [0:0] \end_layout \begin_layout Code + :RH-Firewall-1-INPUT - [0:0] \end_layout \begin_layout Code + -A INPUT -j RH-Firewall-1-INPUT \end_layout \begin_layout Code + -A FORWARD -j RH-Firewall-1-INPUT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -i lo -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p 50 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p 51 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT \end_layout \begin_layout Code + -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited \end_layout \begin_layout Code + COMMIT \end_layout @@ -11083,10 +11711,12 @@ Activate IPv4 & IPv6 firewalling \end_layout \begin_layout Code + # service iptables start \end_layout \begin_layout Code + # service ip6tables start \end_layout @@ -11095,10 +11725,12 @@ Enable automatic start after reboot \end_layout \begin_layout Code + # chkconfig iptables on \end_layout \begin_layout Code + # chkconfig ip6tables on \end_layout @@ -11117,472 +11749,578 @@ but still stateless filter \end_layout \begin_layout Code + # ip6tables -n -v -L \end_layout \begin_layout Code + Chain INPUT (policy DROP 0 packets, 0 bytes) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + 0 0 extIN all sit+ * ::/0 ::/0 \end_layout \begin_layout Code + 4 384 intIN all eth0 * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 ACCEPT all * * ::1/128 ::1/128 \end_layout \begin_layout Code + 0 0 ACCEPT all lo * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `INPUT-default:' \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain FORWARD (policy DROP 0 packets, 0 bytes) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 int2ext all eth0 sit+ ::/0 ::/0 \end_layout \begin_layout Code + 0 0 ext2int all sit+ eth0 ::/0 ::/0 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `FORWARD-default:' \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain OUTPUT (policy DROP 0 packets, 0 bytes) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 extOUT all * sit+ ::/0 ::/0 \end_layout \begin_layout Code + 4 384 intOUT all * eth0 ::/0 ::/0 \end_layout \begin_layout Code + 0 0 ACCEPT all * * ::1/128 ::1/128 \end_layout \begin_layout Code + 0 0 ACCEPT all * lo ::/0 ::/0 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `OUTPUT-default:' \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain ext2int (1 references) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 ACCEPT icmpv6 * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `ext2int-default:' \end_layout \begin_layout Code + 0 0 DROP tcp * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 DROP udp * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain extIN (1 references) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * 3ffe:400:100::1/128 ::/0 \end_layout \begin_layout Code + ¬ tcp spts:512:65535 dpt:22 \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * 3ffe:400:100::2/128 ::/0 \end_layout \begin_layout Code + ¬ tcp spts:512:65535 dpt:22 \end_layout \begin_layout Code + 0 0 ACCEPT icmpv6 * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ tcp spts:1:65535 dpts:1024:65535 flags:!0x16/0x02 \end_layout \begin_layout Code + 0 0 ACCEPT udp * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ udp spts:1:65535 dpts:1024:65535 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ limit: avg 5/min burst 5 LOG flags 0 level 7 prefix `extIN-default:' \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain extOUT (1 references) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * ::/0 \end_layout \begin_layout Code + ¬ 2001:0db8:100::1/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02 \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * ::/0 \end_layout \begin_layout Code + ¬ 2001:0db8:100::2/128tcp spt:22 dpts:512:65535 flags:!0x16/0x02 \end_layout \begin_layout Code + 0 0 ACCEPT icmpv6 * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ tcp spts:1024:65535 dpts:1:65535 \end_layout \begin_layout Code + 0 0 ACCEPT udp * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ udp spts:1024:65535 dpts:1:65535 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `extOUT-default:' \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain int2ext (1 references) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 ACCEPT icmpv6 * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 ACCEPT tcp * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ tcp spts:1024:65535 dpts:1:65535 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `int2ext:' \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `int2ext-default:' \end_layout \begin_layout Code + 0 0 DROP tcp * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 DROP udp * * ::/0 ::/0 \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain intIN (1 references) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 ACCEPT all * * ::/0 \end_layout \begin_layout Code + ¬ fe80::/ffc0:: \end_layout \begin_layout Code + 4 384 ACCEPT all * * ::/0 ff02::/16 \end_layout \begin_layout Code + \end_layout \begin_layout Code + Chain intOUT (1 references) \end_layout \begin_layout Code + pkts bytes target prot opt in out source destination \end_layout \begin_layout Code + ¬ \end_layout \begin_layout Code + 0 0 ACCEPT all * * ::/0 \end_layout \begin_layout Code + ¬ fe80::/ffc0:: \end_layout \begin_layout Code + 4 384 ACCEPT all * * ::/0 ff02::/16 \end_layout \begin_layout Code + 0 0 LOG all * * ::/0 ::/0 \end_layout \begin_layout Code + ¬ LOG flags 0 level 7 prefix `intOUT-default:' \end_layout \begin_layout Code + 0 0 DROP all * * ::/0 ::/0 \end_layout @@ -11612,6 +12350,7 @@ Like in IPv4 clients behind a router can be hided by using IPv6 masquerading \end_layout \begin_layout Code + # ip6tables -t nat -A POSTROUTING -o sixxs -s fec0::/64 -j MASQUERADE \end_layout @@ -11625,6 +12364,7 @@ A dedicated public IPv6 address can be forwarded to an internal IPv6 address, \end_layout \begin_layout Code + # ip6tables -t nat -A PREROUTING -d 2001:db8:0:1:5054:ff:fe01:2345 -i sixxs -j DNAT --to-destination fec0::5054:ff:fe01:2345 \end_layout @@ -11638,6 +12378,7 @@ A dedicated specified port can be forwarded to an internal system, e.g. \end_layout \begin_layout Code + # ip6tables -t nat -A PREROUTING -i sixxs -p tcp --dport 8080 -j DNAT --to-desti nation [fec0::1234]:80 \end_layout @@ -11677,18 +12418,22 @@ Load kernel modules \end_layout \begin_layout Code + # modprobe nf_tables \end_layout \begin_layout Code + # modprobe nf_tables_ipv4 \end_layout \begin_layout Code + # modprobe nf_tables_ipv6 \end_layout \begin_layout Code + # modprobe nf_tables_inet \end_layout @@ -11697,14 +12442,17 @@ Create filter tables \end_layout \begin_layout Code + # nft add table ip filter \end_layout \begin_layout Code + # nft add table ip6 filter \end_layout \begin_layout Code + # nft add table inet filter \end_layout @@ -11713,18 +12461,21 @@ Create input chain in each filter table \end_layout \begin_layout Code + # nft add chain ip filter input { type filter hook input priority 1 \backslash ; } \end_layout \begin_layout Code + # nft add chain ip6 filter input { type filter hook input priority 1 \backslash ; } \end_layout \begin_layout Code + # nft add chain inet filter input { type filter hook input priority 0 \backslash ; } @@ -11743,6 +12494,7 @@ Allow packets which are related to existing connection tracking entries \end_layout \begin_layout Code + # nft add rule inet filter input ct state established,related counter accept \end_layout @@ -11752,11 +12504,13 @@ Allow IPv4 and IPv6 ICMP echo-request (aka ping) \end_layout \begin_layout Code + # nft add rule ip filter input icmp type { echo-request } counter accept \end_layout \begin_layout Code + # nft add rule ip6 filter input icmpv6 type echo-request counter accept \end_layout @@ -11767,10 +12521,33 @@ Allow some important IPv6 ICMP traffic, without counter, but checking hop-limit \end_layout \begin_layout Code -# nft add rule ip6 filter input icmpv6 type { nd-neighbor-solicit, nd-router-adv -ert, nd-neighbor-advert } ip6 hoplimit 1 accept # nft add rule ip6 filter - input icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert - } ip6 hoplimit 255 accept + +# nft add rule ip6 filter input icmpv6 type +\end_layout + +\begin_layout Code + +¬ { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } +\end_layout + +\begin_layout Code + +¬ ip6 hoplimit 1 accept +\end_layout + +\begin_layout Code + +# nft add rule ip6 filter input icmpv6 type +\end_layout + +\begin_layout Code + +¬ { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } +\end_layout + +\begin_layout Code + +¬ ip6 hoplimit 255 accept \end_layout \begin_layout Standard @@ -11787,6 +12564,7 @@ inet \end_layout \begin_layout Code + # nft add rule inet filter input tcp dport 22 ct state new tcp flags \backslash & @@ -11807,30 +12585,37 @@ Table for IPv4 filter \end_layout \begin_layout Code + # nft list table ip filter \end_layout \begin_layout Code + table ip filter { \end_layout \begin_layout Code + chain input { \end_layout \begin_layout Code + type filter hook input priority 1; \end_layout \begin_layout Code + icmp type { echo-request} counter packets 0 bytes 0 accept \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } \end_layout @@ -11839,40 +12624,57 @@ Table for IPv6 filter \end_layout \begin_layout Code + # nft list table ip6 filter \end_layout \begin_layout Code + table ip6 filter { \end_layout \begin_layout Code + chain input { \end_layout \begin_layout Code + type filter hook input priority 1; \end_layout \begin_layout Code + icmpv6 type echo-request counter packets 0 bytes 0 accept \end_layout \begin_layout Code - ip6 hoplimit 1 icmpv6 type { nd-neighbor-advert, nd-neighbor-solicit, - nd-router-advert} accept + + ip6 hoplimit 1 icmpv6 type \end_layout \begin_layout Code - ip6 hoplimit 255 icmpv6 type { nd-neighbor-advert, nd-neighbor-solicit, - nd-router-advert} accept + +¬ { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept \end_layout \begin_layout Code + + ip6 hoplimit 255 icmpv6 type +\end_layout + +\begin_layout Code + +¬ { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept +\end_layout + +\begin_layout Code + } \end_layout \begin_layout Code + } \end_layout @@ -11881,35 +12683,43 @@ Table for IP version aware filter \end_layout \begin_layout Code + # nft list table inet filter \end_layout \begin_layout Code + table inet filter { \end_layout \begin_layout Code + chain input { \end_layout \begin_layout Code + type filter hook input priority 0; \end_layout \begin_layout Code + ct state established,related counter packets 44 bytes 2288 accept \end_layout \begin_layout Code + tcp dport ssh ct state new tcp flags & (syn | ack) == syn counter packets 0 bytes 0 accept \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } \end_layout @@ -12017,10 +12827,12 @@ target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-apps.html#se \end_layout \begin_layout Code + # nc6 ::1 daytime \end_layout \begin_layout Code + 13 JUL 2002 11:22:22 CEST \end_layout @@ -12042,43 +12854,53 @@ target "http://www.insecure.org/nmap/" \end_layout \begin_layout Code + # nmap -6 -sT ::1 \end_layout \begin_layout Code + Starting nmap V. 3.10ALPHA3 ( www.insecure.org/nmap/ ) \end_layout \begin_layout Code + Interesting ports on localhost6 (::1): \end_layout \begin_layout Code + (The 1600 ports scanned but not shown below are in state: closed) \end_layout \begin_layout Code + Port State Service \end_layout \begin_layout Code + 22/tcp open ssh \end_layout \begin_layout Code + 53/tcp open domain \end_layout \begin_layout Code + 515/tcp open printer \end_layout \begin_layout Code + 2401/tcp open cvspserver \end_layout \begin_layout Code + Nmap run completed -- 1 IP address (1 host up) scanned in 0.525 seconds \end_layout @@ -12101,26 +12923,32 @@ target "http://www.bieringer.de/linux/IPv6/status/IPv6+Linux-status-apps.html#se \end_layout \begin_layout Code + # ./strobe ::1 strobe 1.05 (c) 1995-1999 Julian Assange . \end_layout \begin_layout Code + ::1 2401 unassigned unknown \end_layout \begin_layout Code + ::1 22 ssh Secure Shell - RSA encrypted rsh \end_layout \begin_layout Code + ::1 515 printer spooler (lpd) \end_layout \begin_layout Code + ::1 6010 unassigned unknown \end_layout \begin_layout Code + ::1 53 domain Domain Name Server \end_layout @@ -12415,22 +13243,27 @@ Example for an end-to-end encrypted connection in transport mode \end_layout \begin_layout Code + #!/sbin/setkey -f \end_layout \begin_layout Code + flush; \end_layout \begin_layout Code + spdflush; \end_layout \begin_layout Code + spdadd 2001:db8:1:1::1 2001:db8:2:2::2 any -P out ipsec esp/transport//require; \end_layout \begin_layout Code + spdadd 2001:db8:2:2::2 2001:db8:1:1::1 any -P in ipsec esp/transport//require; \end_layout @@ -12443,30 +13276,37 @@ Example for a end-to-end encrypted connection in tunnel mode \end_layout \begin_layout Code + #!/sbin/setkey -f \end_layout \begin_layout Code + flush; \end_layout \begin_layout Code + spdflush; \end_layout \begin_layout Code + spdadd 2001:db8:1:1::1 2001:db8:2:2::2 any -P out ipsec \end_layout \begin_layout Code + ¬ esp/tunnel/2001:db8:1:1::1-2001:db8:2:2::2/require; \end_layout \begin_layout Code + spdadd 2001:db8:2:2::2 2001:db8:1:1::1 any -P in ipsec \end_layout \begin_layout Code + ¬ esp/tunnel/2001:db8:2:2::2-2001:db8:1:1::1/require; \end_layout @@ -12528,18 +13368,22 @@ File: /etc/racoon/racoon.conf \end_layout \begin_layout Code + # Racoon IKE daemon configuration file. \end_layout \begin_layout Code + # See 'man racoon.conf' for a description of the format and entries. \end_layout \begin_layout Code + path include "/etc/racoon"; \end_layout \begin_layout Code + path pre_shared_key "/etc/racoon/psk.txt"; \end_layout @@ -12548,18 +13392,22 @@ path pre_shared_key "/etc/racoon/psk.txt"; \end_layout \begin_layout Code + listen \end_layout \begin_layout Code + { \end_layout \begin_layout Code + isakmp 2001:db8:1:1::1; \end_layout \begin_layout Code + } \end_layout @@ -12568,50 +13416,62 @@ listen \end_layout \begin_layout Code + remote 2001:db8:2:2::2 \end_layout \begin_layout Code + { \end_layout \begin_layout Code + exchange_mode main; \end_layout \begin_layout Code + lifetime time 24 hour; \end_layout \begin_layout Code + proposal \end_layout \begin_layout Code + { \end_layout \begin_layout Code + encryption_algorithm 3des; \end_layout \begin_layout Code + hash_algorithm md5; \end_layout \begin_layout Code + authentication_method pre_shared_key; \end_layout \begin_layout Code + dh_group 2; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } \end_layout @@ -12620,34 +13480,42 @@ remote 2001:db8:2:2::2 \end_layout \begin_layout Code + # gateway-to-gateway \end_layout \begin_layout Code + sainfo address 2001:db8:1:1::1 any address 2001:db8:2:2::2 any \end_layout \begin_layout Code + { \end_layout \begin_layout Code + lifetime time 1 hour; \end_layout \begin_layout Code + encryption_algorithm 3des; \end_layout \begin_layout Code + authentication_algorithm hmac_md5; \end_layout \begin_layout Code + compression_algorithm deflate; \end_layout \begin_layout Code + } \end_layout @@ -12656,30 +13524,37 @@ sainfo address 2001:db8:1:1::1 any address 2001:db8:2:2::2 any \end_layout \begin_layout Code + sainfo address 2001:db8:2:2::2 any address 2001:db8:1:1::1 any \end_layout \begin_layout Code + { \end_layout \begin_layout Code + lifetime time 1 hour; \end_layout \begin_layout Code + encryption_algorithm 3des; \end_layout \begin_layout Code + authentication_algorithm hmac_md5; \end_layout \begin_layout Code + compression_algorithm deflate; \end_layout \begin_layout Code + } \end_layout @@ -12692,10 +13567,12 @@ File: /etc/racoon/psk.txt \end_layout \begin_layout Code + # file for pre-shared keys used for IKE authentication \end_layout \begin_layout Code + # format is: 'identifier' 'key' \end_layout @@ -12704,6 +13581,7 @@ File: /etc/racoon/psk.txt \end_layout \begin_layout Code + 2001:db8:2:2::2 verysecret \end_layout @@ -12727,84 +13605,104 @@ At least the daemon needs to be started. \end_layout \begin_layout Code + # racoon -F -v -f /etc/racoon/racoon.conf \end_layout \begin_layout Code + Foreground mode. \end_layout \begin_layout Code + 2005-01-01 20:30:15: INFO: @(#)ipsec-tools 0.3.3 \end_layout \begin_layout Code + ¬ (http://ipsec-tools.sourceforge.net) \end_layout \begin_layout Code + 2005-01-01 20:30:15: INFO: @(#)This product linked \end_layout \begin_layout Code + ¬ OpenSSL 0.9.7a Feb 19 2003 (http://www.openssl.org/) \end_layout \begin_layout Code + 2005-01-01 20:30:15: INFO: 2001:db8:1:1::1[500] used as isakmp port (fd=7) \end_layout \begin_layout Code + 2005-01-01 20:31:06: INFO: IPsec-SA request for 2001:db8:2:2::2 \end_layout \begin_layout Code + ¬ queued due to no phase1 found. \end_layout \begin_layout Code + 2005-01-01 20:31:06: INFO: initiate new phase 1 negotiation: \end_layout \begin_layout Code + ¬ 2001:db8:1:1::1[500]<=>2001:db8:2:2::2[500] \end_layout \begin_layout Code + 2005-01-01 20:31:06: INFO: begin Identity Protection mode. \end_layout \begin_layout Code + 2005-01-01 20:31:09: INFO: ISAKMP-SA established \end_layout \begin_layout Code + ¬ 2001:db8:1:1::1[500]-2001:db8:2:2::2[500] spi:da3d3693289c9698:ac039a402b2db40 1 \end_layout \begin_layout Code + 2005-01-01 20:31:09: INFO: initiate new phase 2 negotiation: \end_layout \begin_layout Code + ¬ 2001:6f8:900:94::2[0]<=>2001:db8:2:2::2[0] \end_layout \begin_layout Code + 2005-01-01 20:31:10: INFO: IPsec-SA established: \end_layout \begin_layout Code + ¬ ESP/Tunnel 2001:db8:2:2::2->2001:db8:1:1::1 spi=253935531(0xf22bfab) \end_layout \begin_layout Code + 2005-01-01 20:31:10: INFO: IPsec-SA established: \end_layout \begin_layout Code + ¬ ESP/Tunnel 2001:db8:1:1::1->2001:db8:2:2::2 spi=175002564(0xa6e53c4) \end_layout @@ -12822,10 +13720,12 @@ tcpdump \end_layout \begin_layout Code + 20:35:55.305707 2001:db8:1:1::1 > 2001:db8:2:2::2: ESP(spi=0x0a6e53c4,seq=0x3) \end_layout \begin_layout Code + 20:35:55.537522 2001:db8:2:2::2 > 2001:db8:1:1::1: ESP(spi=0x0f22bfab,seq=0x3) \end_layout @@ -12846,94 +13746,117 @@ setkey \end_layout \begin_layout Code + # setkey -D \end_layout \begin_layout Code + 2001:db8:1:1::1 2001:db8:2:2::2 \end_layout \begin_layout Code + esp mode=tunnel spi=175002564(0x0a6e53c4) reqid=0(0x00000000) \end_layout \begin_layout Code + E: 3des-cbc bd26bc45 aea0d249 ef9c6b89 7056080f 5d9fa49c 924e2edd \end_layout \begin_layout Code + A: hmac-md5 60c2c505 517dd8b7 c9609128 a5efc2db \end_layout \begin_layout Code + seq=0x00000000 replay=4 flags=0x00000000 state=mature \end_layout \begin_layout Code + created: Jan 1 20:31:10 2005 current: Jan 1 20:40:47 2005 \end_layout \begin_layout Code + diff: 577(s) hard: 3600(s) soft: 2880(s) \end_layout \begin_layout Code + last: Jan 1 20:35:05 2005 hard: 0(s) soft: 0(s) \end_layout \begin_layout Code + current: 540(bytes) hard: 0(bytes) soft: 0(bytes) \end_layout \begin_layout Code + allocated: 3 hard: 0 soft: 0 \end_layout \begin_layout Code + sadb_seq=1 pid=22358 refcnt=0 \end_layout \begin_layout Code + 2001:db8:2:2::2 2001:db8:1:1::1 \end_layout \begin_layout Code + esp mode=tunnel spi=253935531(0x0f22bfab) reqid=0(0x00000000) \end_layout \begin_layout Code + E: 3des-cbc c1ddba65 83debd62 3f6683c1 20e747ac 933d203f 4777a7ce \end_layout \begin_layout Code + A: hmac-md5 3f957db9 9adddc8c 44e5739d 3f53ca0e \end_layout \begin_layout Code + seq=0x00000000 replay=4 flags=0x00000000 state=mature \end_layout \begin_layout Code + created: Jan 1 20:31:10 2005 current: Jan 1 20:40:47 2005 \end_layout \begin_layout Code + diff: 577(s) hard: 3600(s) soft: 2880(s) \end_layout \begin_layout Code + last: Jan 1 20:35:05 2005 hard: 0(s) soft: 0(s) \end_layout \begin_layout Code + current: 312(bytes) hard: 0(bytes) soft: 0(bytes) \end_layout \begin_layout Code + allocated: 3 hard: 0 soft: 0 \end_layout \begin_layout Code + sadb_seq=0 pid=22358 refcnt=0 \end_layout @@ -13026,18 +13949,22 @@ File: /etc/ipsec.conf \end_layout \begin_layout Code + # /etc/ipsec.conf - Openswan IPsec configuration file \end_layout \begin_layout Code + # \end_layout \begin_layout Code + # Manual: ipsec.conf.5 \end_layout \begin_layout Code + version 2.0 # conforms to second version of ipsec.conf specification \end_layout @@ -13046,22 +13973,27 @@ version 2.0 # conforms to second version of ipsec.conf specification \end_layout \begin_layout Code + # basic configuration \end_layout \begin_layout Code + config setup \end_layout \begin_layout Code + # Debug-logging controls: "none" for (almost) none, "all" for lots. \end_layout \begin_layout Code + # klipsdebug=none \end_layout \begin_layout Code + # plutodebug="control parsing" \end_layout @@ -13070,10 +14002,12 @@ config setup \end_layout \begin_layout Code + #Disable Opportunistic Encryption \end_layout \begin_layout Code + include /etc/ipsec.d/examples/no_oe.conf \end_layout @@ -13082,55 +14016,68 @@ include /etc/ipsec.d/examples/no_oe.conf \end_layout \begin_layout Code + conn ipv6-p1-p2 \end_layout \begin_layout Code + connaddrfamily=ipv6 # Important for IPv6, but no longer needed since StrongSwan 4 \end_layout \begin_layout Code + left=2001:db8:1:1::1 \end_layout \begin_layout Code + right=2001:db8:2:2::2 \end_layout \begin_layout Code + authby=secret \end_layout \begin_layout Code + esp=aes128-sha1 \end_layout \begin_layout Code + ike=aes128-sha-modp1024 \end_layout \begin_layout Code + type=transport \end_layout \begin_layout Code + #type=tunnel \end_layout \begin_layout Code + compress=no \end_layout \begin_layout Code + #compress=yes \end_layout \begin_layout Code + auto=add \end_layout \begin_layout Code + #auto=up \end_layout @@ -13147,6 +14094,7 @@ File: /etc/ipsec.secrets \end_layout \begin_layout Code + 2001:db8:1:1::1 2001:db8:2:2::2 : PSK "verysecret" \end_layout @@ -13168,6 +14116,7 @@ If installation of Openswan was successfully, an initscript should exist \end_layout \begin_layout Code + # /etc/rc.d/init.d/ipsec start \end_layout @@ -13185,34 +14134,42 @@ IPsec SA established \end_layout \begin_layout Code + # ipsec auto --up ipv6-peer1-peer2 \end_layout \begin_layout Code + 104 "ipv6-p1-p2" #1: STATE_MAIN_I1: initiate \end_layout \begin_layout Code + 106 "ipv6-p1-p2" #1: STATE_MAIN_I2: sent MI2, expecting MR2 \end_layout \begin_layout Code + 108 "ipv6-p1-p2" #1: STATE_MAIN_I3: sent MI3, expecting MR3 \end_layout \begin_layout Code + 004 "ipv6-p1-p2" #1: STATE_MAIN_I4: ISAKMP SA established \end_layout \begin_layout Code + 112 "ipv6-p1-p2" #2: STATE_QUICK_I1: initiate \end_layout \begin_layout Code + 004 "ipv6-p1-p2" #2: STATE_QUICK_I2: sent QI2, \end_layout \begin_layout Code + ¬ IPsec SA established {ESP=>0xa98b7710 <0xa51e1f22} \end_layout @@ -13230,94 +14187,117 @@ setkey \end_layout \begin_layout Code + # setkey -D \end_layout \begin_layout Code + 2001:db8:1:1::1 2001:db8:2:2::2 \end_layout \begin_layout Code + esp mode=transport spi=2844489488(0xa98b7710) reqid=16385(0x00004001) \end_layout \begin_layout Code + E: aes-cbc 082ee274 2744bae5 7451da37 1162b483 \end_layout \begin_layout Code + A: hmac-sha1 b7803753 757417da 477b1c1a 64070455 ab79082c \end_layout \begin_layout Code + seq=0x00000000 replay=64 flags=0x00000000 state=mature \end_layout \begin_layout Code + created: Jan 1 21:16:32 2005 current: Jan 1 21:22:20 2005 \end_layout \begin_layout Code + diff: 348(s) hard: 0(s) soft: 0(s) \end_layout \begin_layout Code + last: hard: 0(s) soft: 0(s) \end_layout \begin_layout Code + current: 0(bytes) hard: 0(bytes) soft: 0(bytes) \end_layout \begin_layout Code + allocated: 0 hard: 0 soft: 0 \end_layout \begin_layout Code + sadb_seq=1 pid=23825 refcnt=0 \end_layout \begin_layout Code + 2001:db8:2:2::2 2001:db8:1:1::1 \end_layout \begin_layout Code + esp mode=transport spi=2770214690(0xa51e1f22) reqid=16385(0x00004001) \end_layout \begin_layout Code + E: aes-cbc 6f59cc30 8d856056 65e07b76 552cac18 \end_layout \begin_layout Code + A: hmac-sha1 c7c7d82b abfca8b1 5440021f e0c3b335 975b508b \end_layout \begin_layout Code + seq=0x00000000 replay=64 flags=0x00000000 state=mature \end_layout \begin_layout Code + created: Jan 1 21:16:31 2005 current: Jan 1 21:22:20 2005 \end_layout \begin_layout Code + diff: 349(s) hard: 0(s) soft: 0(s) \end_layout \begin_layout Code + last: hard: 0(s) soft: 0(s) \end_layout \begin_layout Code + current: 0(bytes) hard: 0(bytes) soft: 0(bytes) \end_layout \begin_layout Code + allocated: 0 hard: 0 soft: 0 \end_layout \begin_layout Code + sadb_seq=0 pid=23825 refcnt=0 \end_layout @@ -13339,10 +14319,12 @@ ip \end_layout \begin_layout Code + # ip xfrm policy \end_layout \begin_layout Code + ... \end_layout @@ -13351,10 +14333,12 @@ ip \end_layout \begin_layout Code + # ip xfrm state \end_layout \begin_layout Code + ... \end_layout @@ -13401,32 +14385,39 @@ Proper working QoS is only possible on the outgoing interface of a router \end_layout \begin_layout Code + -------------->------- \end_layout \begin_layout Code + Queue 1 \backslash \end_layout \begin_layout Code + --->--- ---->--------->--------->--------------- \end_layout \begin_layout Code + Big pipe Queue 2 Queue 1 / Queue 2 / Queue 3 Thin Pipe \end_layout \begin_layout Code + --->---- ---->--------->--------->--------------- \end_layout \begin_layout Code + Queue 3 / \end_layout \begin_layout Code + -------------->------- \end_layout @@ -13495,6 +14486,7 @@ Define root qdisc with a bandwidth of 1000 MBit/s on eth1 \end_layout \begin_layout Code + # tc qdisc add dev eth1 root handle 1: cbq avpkt 1000 bandwidth 1000Mbit \end_layout @@ -13507,6 +14499,7 @@ Define a class 1:1 with 1 MBit/s \end_layout \begin_layout Code + # tc class add dev eth1 parent 1: classid 1:1 cbq rate 1Mbit allot 1500 bounded \end_layout @@ -13516,6 +14509,7 @@ Define a class 1:2 with 50 MBit/s \end_layout \begin_layout Code + # tc class add dev eth1 parent 1: classid 1:2 cbq rate 50Mbit allot 1500 bounded \end_layout @@ -13525,6 +14519,7 @@ Define a class 1:3 with 10 MBit/s \end_layout \begin_layout Code + # tc class add dev eth1 parent 1: classid 1:3 cbq rate 10Mbit allot 1500 bounded \end_layout @@ -13534,6 +14529,7 @@ Define a class 1:4 with 200 kBit/s \end_layout \begin_layout Code + # tc class add dev eth1 parent 1: classid 1:4 cbq rate 200kbit allot 1500 bounded \end_layout @@ -13559,6 +14555,7 @@ match ip dport 5001 0xffff \end_layout \begin_layout Code + # tc filter add dev eth1 parent 1: protocol ip u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:1 \end_layout @@ -13576,6 +14573,7 @@ match ip6 protocol 6 0xff \end_layout \begin_layout Code + # tc filter add dev eth1 parent 1: protocol ipv6 u32 match ip6 protocol 6 0xff match ip6 dport 5001 0xffff flowid 1:2 \end_layout @@ -13589,6 +14587,7 @@ match ip6 flowlabel 12345 0x3ffff \end_layout \begin_layout Code + # tc filter add dev eth1 parent 1: protocol ipv6 u32 match ip6 flowlabel 12345 0x3ffff flowid 1:3 \end_layout @@ -13602,6 +14601,7 @@ handle 32 fw \end_layout \begin_layout Code + # tc filter add dev eth1 parent 1: protocol ipv6 handle 32 fw flowid 1:4 \end_layout @@ -13611,6 +14611,7 @@ The last filter definition requires an entry in the ip6tables to mark a \end_layout \begin_layout Code + # ip6tables -A POSTROUTING -t mangle -p tcp --dport 5003 -j MARK --set-mark 32 \end_layout @@ -13624,14 +14625,17 @@ Start on server side each one one separate console: \end_layout \begin_layout Code + # iperf -V -s -p 5001 \end_layout \begin_layout Code + # iperf -V -s -p 5002 \end_layout \begin_layout Code + # iperf -V -s -p 5003 \end_layout @@ -13640,29 +14644,35 @@ Start on client side and compare results: \end_layout \begin_layout Code + # iperf -V -c SERVER-IPv4 -p 5001 (expected: 1 MBit/s) \end_layout \begin_layout Code + # iperf -V -c SERVER-IPv6 -p 5001 (expected: 50 MBit/s) \end_layout \begin_layout Code + # iperf -V -c SERVER-IPv4 -p 5002 (expected: >> 50 MBit/s && <= 1000 MBit/s) \end_layout \begin_layout Code + # iperf -V -c SERVER-IPv6 -p 5002 (expected: >> 50 MBit/s && <= 1000 MBit/s) \end_layout \begin_layout Code + # iperf -V -c SERVER-IPv4 -p 5003 (expected: >> 50 MBit/s && <= 1000 MBit/s) \end_layout \begin_layout Code + # iperf -V -c SERVER-IPv6 -p 5003 (expected: 200 kBit/s) \end_layout @@ -13738,18 +14748,22 @@ To enable IPv6 for listening, following options are requested to change \end_layout \begin_layout Code + options { \end_layout \begin_layout Code + # sure other options here, too \end_layout \begin_layout Code + listen-on-v6 { any; }; \end_layout \begin_layout Code + }; \end_layout @@ -13758,48 +14772,59 @@ This should result after restart in e.g. \end_layout \begin_layout Code + # netstat -lnptu |grep "named \backslash W*$" \end_layout \begin_layout Code + tcp 0 0 :::53 :::* LISTEN 1234/named \end_layout \begin_layout Code + ¬ # incoming TCP requests \end_layout \begin_layout Code + udp 0 0 1.2.3.4:53 0.0.0.0:* 1234/named \end_layout \begin_layout Code + ¬ # incoming UDP requests to IPv4 1.2.3.4 \end_layout \begin_layout Code + udp 0 0 127.0.0.1:53 0.0.0.0:* 1234/named \end_layout \begin_layout Code + ¬ # incoming UDP requests to IPv4 localhost \end_layout \begin_layout Code + udp 0 0 0.0.0.0:32868 0.0.0.0:* 1234/named \end_layout \begin_layout Code + ¬ # dynamic chosen port for outgoing queries \end_layout \begin_layout Code + udp 0 0 :::53 :::* 1234/named \end_layout \begin_layout Code + ¬ # incoming UDP request to any IPv6 \end_layout @@ -13808,6 +14833,7 @@ And a simple test looks like \end_layout \begin_layout Code + # dig localhost @::1 \end_layout @@ -13824,18 +14850,22 @@ To disable IPv6 for listening, following options are requested to change \end_layout \begin_layout Code + options { \end_layout \begin_layout Code + # sure other options here, too \end_layout \begin_layout Code + listen-on-v6 { none; }; \end_layout \begin_layout Code + }; \end_layout @@ -13849,54 +14879,67 @@ IPv6 enabled ACLs are possible and should be used whenever it's possible. \end_layout \begin_layout Code + acl internal-net { \end_layout \begin_layout Code + 127.0.0.1; \end_layout \begin_layout Code + 1.2.3.0/24; \end_layout \begin_layout Code + 2001:0db8:100::/56; \end_layout \begin_layout Code + ::1/128; \end_layout \begin_layout Code + ::ffff:1.2.3.4/128; \end_layout \begin_layout Code + }; \end_layout \begin_layout Code + acl ns-internal-net { \end_layout \begin_layout Code + 1.2.3.4; \end_layout \begin_layout Code + 1.2.3.5; \end_layout \begin_layout Code + 2001:0db8:100::4/128; \end_layout \begin_layout Code + 2001:0db8:100::5/128; \end_layout \begin_layout Code + }; \end_layout @@ -13908,26 +14951,32 @@ This ACLs can be used e.g. \end_layout \begin_layout Code + options { \end_layout \begin_layout Code + # sure other options here, too \end_layout \begin_layout Code + listen-on-v6 { none; }; \end_layout \begin_layout Code + allow-query { internal-net; }; \end_layout \begin_layout Code + allow-transfer { ns-internal-net; }; \end_layout \begin_layout Code + }; \end_layout @@ -13952,6 +15001,7 @@ This option is not required, but perhaps needed: \end_layout \begin_layout Code + query-source-v6 address port ; \end_layout @@ -13972,6 +15022,7 @@ Transfer source address is used for outgoing zone transfers: \end_layout \begin_layout Code + transfer-source-v6 [port port]; \end_layout @@ -13984,6 +15035,7 @@ Notify source address is used for outgoing notify messages: \end_layout \begin_layout Code + notify-source-v6 [port port]; \end_layout @@ -14136,22 +15188,27 @@ Specifying a dedicated server for the query, an IPv6 connect can be forced: \end_layout \begin_layout Code + $ host -t aaaa www.6bone.net 2001:0db8:200:f101::1 \end_layout \begin_layout Code + Using domain server: \end_layout \begin_layout Code + Name: 2001:0db8:200:f101::1 \end_layout \begin_layout Code + Address: 2001:0db8:200:f101::1#53 \end_layout \begin_layout Code + Aliases: \end_layout @@ -14160,6 +15217,7 @@ Aliases: \end_layout \begin_layout Code + Host www.6bone.net. not found: 5(REFUSED) \end_layout @@ -14169,14 +15227,17 @@ Related log entry looks like following: \end_layout \begin_layout Code + Jan 3 12:43:32 gate named[12347]: client \end_layout \begin_layout Code + ¬ 2001:0db8:200:f101:212:34ff:fe12:3456#32770: \end_layout \begin_layout Code + query denied \end_layout @@ -14194,22 +15255,27 @@ A successful IPv6 connect looks like following: \end_layout \begin_layout Code + $ host -t aaaa www.6bone.net 2001:0db8:200:f101::1 \end_layout \begin_layout Code + Using domain server: \end_layout \begin_layout Code + Name: 2001:0db8:200:f101::1 \end_layout \begin_layout Code + Address: 2001:0db8:200:f101::1#53 \end_layout \begin_layout Code + Aliases: \end_layout @@ -14218,12 +15284,14 @@ Aliases: \end_layout \begin_layout Code + www.6bone.net. is an alias for 6bone.net. \end_layout \begin_layout Code + 6bone.net. has AAAA address 3ffe:b00:c18:1::10 \end_layout @@ -14267,42 +15335,52 @@ If you enable a built-in service like e.g. \end_layout \begin_layout Code + # diff -u /etc/xinetd.d/daytime.orig /etc/xinetd.d/daytime \end_layout \begin_layout Code + --- /etc/xinetd.d/daytime.orig Sun Dec 16 19:00:14 2001 \end_layout \begin_layout Code + +++ /etc/xinetd.d/daytime Sun Dec 16 19:00:22 2001 \end_layout \begin_layout Code + @@ -10,5 +10,5 @@ \end_layout \begin_layout Code + protocol = tcp \end_layout \begin_layout Code + user = root \end_layout \begin_layout Code + wait = no \end_layout \begin_layout Code + - disable = yes \end_layout \begin_layout Code + + disable = no \end_layout \begin_layout Code + } \end_layout @@ -14311,22 +15389,27 @@ After restarting the xinetd you should get a positive result like: \end_layout \begin_layout Code + # netstat -lnptu -A inet6 |grep "xinetd*" \end_layout \begin_layout Code + tcp 0 0 ::ffff:192.168.1.1:993 :::* LISTEN 12345/xinetd-ipv6 \end_layout \begin_layout Code + tcp 0 0 :::13 :::* LISTEN 12345/xinetd-ipv6 <- service \end_layout \begin_layout Code + ¬ daytime/tcp \end_layout \begin_layout Code + tcp 0 0 ::ffff:192.168.1.1:143 :::* LISTEN 12345/xinetd-ipv6 \end_layout @@ -14381,22 +15464,27 @@ Virtual host listen on an IPv6 address only \end_layout \begin_layout Code + Listen [2001:0db8:100::1]:80 \end_layout \begin_layout Code + \end_layout \begin_layout Code + ServerName ipv6only.yourdomain.yourtopleveldomain \end_layout \begin_layout Code + # ...sure more config lines \end_layout \begin_layout Code + \end_layout @@ -14405,26 +15493,32 @@ Virtual host listen on an IPv6 and on an IPv4 address \end_layout \begin_layout Code + Listen [2001:0db8:100::2]:80 \end_layout \begin_layout Code + Listen 1.2.3.4:80 \end_layout \begin_layout Code + \end_layout \begin_layout Code + ServerName ipv6andipv4.yourdomain.yourtopleveldomain \end_layout \begin_layout Code + # ...sure more config lines \end_layout \begin_layout Code + \end_layout @@ -14433,20 +15527,24 @@ This should result after restart in e.g. \end_layout \begin_layout Code + # netstat -lnptu |grep "httpd2 \backslash W*$" \end_layout \begin_layout Code + tcp 0 0 1.2.3.4:80 0.0.0.0:* LISTEN 12345/httpd2 \end_layout \begin_layout Code + tcp 0 0 2001:0db8:100::1:80 :::* LISTEN 12345/httpd2 \end_layout \begin_layout Code + tcp 0 0 2001:0db8:100::2:80 :::* LISTEN 12345/httpd2 \end_layout @@ -14546,42 +15644,52 @@ Radvd's config file is normally /etc/radvd.conf. \end_layout \begin_layout Code + interface eth0 { \end_layout \begin_layout Code + AdvSendAdvert on; \end_layout \begin_layout Code + MinRtrAdvInterval 3; \end_layout \begin_layout Code + MaxRtrAdvInterval 10; \end_layout \begin_layout Code + prefix 2001:0db8:0100:f101::/64 { \end_layout \begin_layout Code + AdvOnLink on; \end_layout \begin_layout Code + AdvAutonomous on; \end_layout \begin_layout Code + AdvRouterAddr on; \end_layout \begin_layout Code + }; \end_layout \begin_layout Code + }; \end_layout @@ -14590,23 +15698,28 @@ This results on client side in \end_layout \begin_layout Code + # ip -6 addr show eth0 \end_layout \begin_layout Code + 3: eth0: mtu 1500 qdisc pfifo_fast qlen 100 \end_layout \begin_layout Code + inet6 2001:0db8:100:f101:2e0:12ff:fe34:1234/64 scope global dynamic \end_layout \begin_layout Code + valid_lft 2591992sec preferred_lft 604792sec \end_layout \begin_layout Code + inet6 fe80::2e0:12ff:fe34:1234/10 scope link \end_layout @@ -14629,54 +15742,67 @@ Version since 0.6.2pl3 support the automatic (re)-generation of the prefix \end_layout \begin_layout Code + interface eth0 { \end_layout \begin_layout Code + AdvSendAdvert on; \end_layout \begin_layout Code + MinRtrAdvInterval 3; \end_layout \begin_layout Code + MaxRtrAdvInterval 10; \end_layout \begin_layout Code + prefix 0:0:0:f101::/64 { \end_layout \begin_layout Code + AdvOnLink off; \end_layout \begin_layout Code + AdvAutonomous on; \end_layout \begin_layout Code + AdvRouterAddr on; \end_layout \begin_layout Code + Base6to4Interface ppp0; \end_layout \begin_layout Code + AdvPreferredLifetime 20; \end_layout \begin_layout Code + AdvValidLifetime 30; \end_layout \begin_layout Code + }; \end_layout \begin_layout Code + }; \end_layout @@ -14686,23 +15812,28 @@ This results on client side in (assuming, ppp0 has currently 1.2.3.4 as local \end_layout \begin_layout Code + # /sbin/ip -6 addr show eth0 \end_layout \begin_layout Code + 3: eth0: mtu 1500 qdisc pfifo_fast qlen 100 \end_layout \begin_layout Code + inet6 2002:0102:0304:f101:2e0:12ff:fe34:1234/64 scope global dynamic \end_layout \begin_layout Code + valid_lft 22sec preferred_lft 12sec \end_layout \begin_layout Code + inet6 fe80::2e0:12ff:fe34:1234/10 scope link \end_layout @@ -14719,6 +15850,7 @@ Additional note: if you do not used special 6to4 support in initscripts, \end_layout \begin_layout Code + # /sbin/ip -6 route add 2002:0102:0304:f101::/64 dev eth0 metric 1 \end_layout @@ -14745,86 +15877,107 @@ radvdump \end_layout \begin_layout Code + # radvdump \end_layout \begin_layout Code + Router advertisement from fe80::280:c8ff:feb9:cef9 (hoplimit 255) \end_layout \begin_layout Code + AdvCurHopLimit: 64 \end_layout \begin_layout Code + AdvManagedFlag: off \end_layout \begin_layout Code + AdvOtherConfigFlag: off \end_layout \begin_layout Code + AdvHomeAgentFlag: off \end_layout \begin_layout Code + AdvReachableTime: 0 \end_layout \begin_layout Code + AdvRetransTimer: 0 \end_layout \begin_layout Code + Prefix 2002:0102:0304:f101::/64 \end_layout \begin_layout Code + AdvValidLifetime: 30 \end_layout \begin_layout Code + AdvPreferredLifetime: 20 \end_layout \begin_layout Code + AdvOnLink: off \end_layout \begin_layout Code + AdvAutonomous: on \end_layout \begin_layout Code + AdvRouterAddr: on \end_layout \begin_layout Code + Prefix 2001:0db8:100:f101::/64 \end_layout \begin_layout Code + AdvValidLifetime: 2592000 \end_layout \begin_layout Code + AdvPreferredLifetime: 604800 \end_layout \begin_layout Code + AdvOnLink: on \end_layout \begin_layout Code + AdvAutonomous: on \end_layout \begin_layout Code + AdvRouterAddr: on \end_layout \begin_layout Code + AdvSourceLLAddress: 00 80 12 34 56 78 \end_layout @@ -14876,54 +16029,67 @@ dhcp6s's config file is normally /etc/dhcp6s.conf. \end_layout \begin_layout Code + interface eth0 { \end_layout \begin_layout Code + server-preference 255; \end_layout \begin_layout Code + renew-time 60; \end_layout \begin_layout Code + rebind-time 90; \end_layout \begin_layout Code + prefer-life-time 130; \end_layout \begin_layout Code + valid-life-time 200; \end_layout \begin_layout Code + allow rapid-commit; \end_layout \begin_layout Code + option dns_servers 2001:db8:0:f101::1 sub.domain.example; \end_layout \begin_layout Code + link AAA { \end_layout \begin_layout Code + range 2001:db8:0:f101::1000 to 2001:db8:0:f101::ffff/64; \end_layout \begin_layout Code + prefix 2001:db8:0:f101::/64; \end_layout \begin_layout Code + }; \end_layout \begin_layout Code + }; \end_layout @@ -14941,18 +16107,22 @@ dhcp6c's config file is normally /etc/dhcp6c.conf. \end_layout \begin_layout Code + interface eth0 { \end_layout \begin_layout Code + send rapid-commit; \end_layout \begin_layout Code + request domain-name-servers; \end_layout \begin_layout Code + }; \end_layout @@ -14969,6 +16139,7 @@ Start server, e.g. \end_layout \begin_layout Code + # service dhcp6s start \end_layout @@ -14981,6 +16152,7 @@ Start client in foreground, e.g. \end_layout \begin_layout Code + # dhcp6c -f eth0 \end_layout @@ -14998,6 +16170,7 @@ The server has one foreground and two debug toggles (both should be used \end_layout \begin_layout Code + # dhcp6s -d -D -f eth0 \end_layout @@ -15011,6 +16184,7 @@ As general debugging for test whether the IPv6 DHCP server is reable on \end_layout \begin_layout Code + # ping6 -I eth0 ff02::1:2 \end_layout @@ -15019,51 +16193,63 @@ The client has one foreground and two debug toggles, here is an example: \end_layout \begin_layout Code + # dhcp6c -d -f eth0 \end_layout \begin_layout Code + Oct/03/2005 17:18:16 dhcpv6 doesn't support hardware type 776 \end_layout \begin_layout Code + Oct/03/2005 17:18:16 doesn't support sit0 address family 0 \end_layout \begin_layout Code + Oct/03/2005 17:18:16 netlink_recv_rtgenmsg error \end_layout \begin_layout Code + Oct/03/2005 17:18:16 netlink_recv_rtgenmsg error \end_layout \begin_layout Code + Oct/03/2005 17:18:17 status code for this address is: success \end_layout \begin_layout Code + Oct/03/2005 17:18:17 status code: success \end_layout \begin_layout Code + Oct/03/2005 17:18:17 netlink_recv_rtgenmsg error \end_layout \begin_layout Code + Oct/03/2005 17:18:17 netlink_recv_rtgenmsg error \end_layout \begin_layout Code + Oct/03/2005 17:18:17 assigned address 2001:db8:0:f101::1002 prefix len is not \end_layout \begin_layout Code + ¬ in any RAs prefix length using 64 bit instead \end_layout \begin_layout Code + Oct/03/2005 17:18:17 renew time 60, rebind time 9 \end_layout @@ -15114,26 +16300,32 @@ Create a dedicated configuration file /etc/dhcp/dhcpd6.conf for the IPv6 \end_layout \begin_layout Code + default-lease-time 600; \end_layout \begin_layout Code + max-lease-time 7200; \end_layout \begin_layout Code + log-facility local7; \end_layout \begin_layout Code + subnet6 2001:db8:0:1::/64 { \end_layout \begin_layout Code + # Range for clients \end_layout \begin_layout Code + range6 2001:db8:0:1::129 2001:db8:0:1::254; \end_layout @@ -15142,10 +16334,12 @@ subnet6 2001:db8:0:1::/64 { \end_layout \begin_layout Code + # Range for clients requesting a temporary address \end_layout \begin_layout Code + range6 2001:db8:0:1::/64 temporary; \end_layout @@ -15154,14 +16348,17 @@ subnet6 2001:db8:0:1::/64 { \end_layout \begin_layout Code + # Additional options \end_layout \begin_layout Code + option dhcp6.name-servers fec0:0:0:1::1; \end_layout \begin_layout Code + option dhcp6.domain-search "domain.example"; \end_layout @@ -15170,10 +16367,12 @@ subnet6 2001:db8:0:1::/64 { \end_layout \begin_layout Code + # Prefix range for delegation to sub-routers \end_layout \begin_layout Code + prefix6 2001:db8:0:100:: 2001:db8:0:f00:: /56; \end_layout @@ -15182,27 +16381,33 @@ subnet6 2001:db8:0:1::/64 { \end_layout \begin_layout Code + # Example for a fixed host address \end_layout \begin_layout Code + host specialclient { \end_layout \begin_layout Code + host-identifier option dhcp6.client-id 00:01:00:01:4a:1f:ba:e3:60:b9:1f:01: 23:45; \end_layout \begin_layout Code + fixed-address6 2001:db8:0:1::127; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } \end_layout @@ -15238,6 +16443,7 @@ dhcp6c \end_layout \begin_layout Code + # hexdump -e '"%07.7_ax " 1/2 "%04x" " " 14/1 "%02x:" " \backslash n"' /var/lib/dhcpv6/dhcp6c_duid 0000000 000e 00:01:00:01:4a:1f:ba:e3:60:b9:1f:01 @@ -15257,46 +16463,56 @@ Start server in foreground: \end_layout \begin_layout Code + # /usr/sbin/dhcpd -6 -d -cf /etc/dhcp/dhcpd6.conf eth1 \end_layout \begin_layout Code + Internet Systems Consortium DHCP Server 4.1.0 \end_layout \begin_layout Code + Copyright 2004-2008 Internet Systems Consortium. \end_layout \begin_layout Code + All rights reserved. \end_layout \begin_layout Code + For info, please visit http://www.isc.org/sw/dhcp/ \end_layout \begin_layout Code + Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file \end_layout \begin_layout Code + Wrote 0 leases to leases file. \end_layout \begin_layout Code + Bound to *:547 \end_layout \begin_layout Code + Listening on Socket/5/eth1/2001:db8:0:1::/64 \end_layout \begin_layout Code + Sending on Socket/5/eth1/2001:db8:0:1::/64 \end_layout @@ -15329,55 +16545,68 @@ Create a dedicated configuration file /etc/dibbler/server.conf . \end_layout \begin_layout Code + log-level 8 \end_layout \begin_layout Code + log-mode short \end_layout \begin_layout Code + preference 0 \end_layout \begin_layout Code + iface "eth1" { \end_layout \begin_layout Code + // also ranges can be defines, instead of exact values t1 1800-2000 t2 2700-3000 \end_layout \begin_layout Code + prefered-lifetime 3600 \end_layout \begin_layout Code + valid-lifetime 7200 \end_layout \begin_layout Code + class { \end_layout \begin_layout Code + pool 2001:6f8:12d8:1::/64 \end_layout \begin_layout Code + } \end_layout \begin_layout Code + option dns-server fec0:0:0:1::1 \end_layout \begin_layout Code + option domain domain.example \end_layout \begin_layout Code + } \end_layout @@ -15394,124 +16623,148 @@ Start server in foreground: \end_layout \begin_layout Code + # dibbler-server run \end_layout \begin_layout Code + | Dibbler - a portable DHCPv6, version 0.7.3 (SERVER, Linux port) \end_layout \begin_layout Code + | Authors : Tomasz Mrugalski,Marek Senderski \end_layout \begin_layout Code + | Licence : GNU GPL v2 only. Developed at Gdansk University of Technology. \end_layout \begin_layout Code + | Homepage: http://klub.com.pl/dhcpv6/ \end_layout \begin_layout Code + 2009.05.28 10:18:48 Server Notice My pid (1789) is stored in /var/lib/dibbler/s erver.pid \end_layout \begin_layout Code + 2009.05.28 10:18:48 Server Notice Detected iface eth0/3, MAC=54:52:00:01:23:45. \end_layout \begin_layout Code + 2009.05.28 10:18:48 Server Notice Detected iface eth1/2, MAC=54:52:00:67:89:ab. \end_layout \begin_layout Code + 2009.05.28 10:18:48 Server Notice Detected iface lo/1, MAC=00:00:00:00:00:00. \end_layout \begin_layout Code + 2009.05.28 10:18:48 Server Debug Skipping database loading. \end_layout \begin_layout Code + 2009.05.28 10:18:48 Server Debug Cache:server-cache.xml file: parsing started, expecting 0 entries. \end_layout \begin_layout Code + 2009.05.28 10:18:48 Server Notice Parsing /etc/dibbler/server.conf config file... \end_layout \begin_layout Code + 18:48 Server Debug Setting 0 generic option(s). \end_layout \begin_layout Code + 18:48 Server Debug 0 per-client configurations (exceptions) added. \end_layout \begin_layout Code + 18:48 Server Debug Parsing /etc/dibbler/server.conf done. \end_layout \begin_layout Code + 18:48 Server Info 0 client class(es) defined. \end_layout \begin_layout Code + 18:48 Server Debug 1 interface(s) specified in /etc/dibbler/server.conf \end_layout \begin_layout Code + 18:48 Server Info Mapping allow, deny list to class 0:0 allow/deny entries in total. \end_layout \begin_layout Code + 18:48 Server Info Interface eth1/2 configuration has been loaded. \end_layout \begin_layout Code + 18:48 Server Notice Running in stateful mode. \end_layout \begin_layout Code + 18:48 Server Info My DUID is 00:01:00:01:11:aa:6d:a7:54:52:00:67:89:ab. \end_layout \begin_layout Code + 18:48 Server Notice Creating multicast (ff02::1:2) socket on eth1/2 (eth1/2) interface. \end_layout \begin_layout Code + 18:48 Server Debug Cache: size set to 1048576 bytes, 1 cache entry size is 87 bytes, so maximum 12052 address-client pair(s) may be cached. \end_layout \begin_layout Code + 18:48 Server Notice Accepting connections. Next event in 4294967295 second(s). \end_layout @@ -15573,6 +16826,7 @@ tcp_wrapper is controlled by two files name /etc/hosts.allow and /etc/hosts.deny \end_layout \begin_layout Code + $ man hosts.allow \end_layout @@ -15586,11 +16840,13 @@ In this file, each service which should be positive filtered (means connects \end_layout \begin_layout Code + sshd: 1.2.3. [2001:0db8:100:200::]/64 \end_layout \begin_layout Code + daytime-stream: 1.2.3. [2001:0db8:100:200::]/64 \end_layout @@ -15611,6 +16867,7 @@ This file contains all negative filter entries and should normally deny \end_layout \begin_layout Code + ALL: ALL \end_layout @@ -15622,10 +16879,12 @@ If this node is a more sensible one you can replace the standard line above \end_layout \begin_layout Code + ALL: ALL: spawn (echo "Attempt from %h %a to %d at `date`" \end_layout \begin_layout Code + | tee -a /var/log/tcp.deny.log | mail root@localhost) \end_layout @@ -15648,18 +16907,22 @@ A refused connection via IPv4 to an xinetd covered daytime service produces \end_layout \begin_layout Code + Jan 2 20:40:44 gate xinetd-ipv6[12346]: FAIL: daytime-stream libwrap \end_layout \begin_layout Code + ¬ from=::ffff:1.2.3.4 \end_layout \begin_layout Code + Jan 2 20:32:06 gate xinetd-ipv6[12346]: FAIL: daytime-stream libwrap \end_layout \begin_layout Code + from=2001:0db8:100:200::212:34ff:fe12:3456 \end_layout @@ -15669,22 +16932,27 @@ A refused connection via IPv4 to an dual-listen sshd produces a line like \end_layout \begin_layout Code + Jan 2 20:24:17 gate sshd[12345]: refused connect from ::ffff:1.2.3.4 \end_layout \begin_layout Code + ¬ (::ffff:1.2.3.4) \end_layout \begin_layout Code + Jan 2 20:39:33 gate sshd[12345]: refused connect \end_layout \begin_layout Code + from 2001:0db8:100:200::212:34ff:fe12:3456 \end_layout \begin_layout Code + ¬ (2001:0db8:100:200::212:34ff:fe12:3456) \end_layout @@ -15698,18 +16966,22 @@ A permitted connection via IPv4 to an xinetd covered daytime service produces \end_layout \begin_layout Code + Jan 2 20:37:50 gate xinetd-ipv6[12346]: START: daytime-stream pid=0 \end_layout \begin_layout Code + ¬ from=::ffff:1.2.3.4 \end_layout \begin_layout Code + Jan 2 20:37:56 gate xinetd-ipv6[12346]: START: daytime-stream pid=0 \end_layout \begin_layout Code + from=2001:0db8:100:200::212:34ff:fe12:3456 \end_layout @@ -15719,18 +16991,22 @@ A permitted connection via IPv4 to an dual-listen sshd produces a line like \end_layout \begin_layout Code + Jan 2 20:43:10 gate sshd[21975]: Accepted password for user from ::ffff:1.2.3.4 \end_layout \begin_layout Code + ¬ port 33381 ssh2 \end_layout \begin_layout Code + Jan 2 20:42:19 gate sshd[12345]: Accepted password for user \end_layout \begin_layout Code + from 2001:0db8:100:200::212:34ff:fe12:3456 port 33380 ssh2 \end_layout @@ -15754,6 +17030,7 @@ Edit the configuration file, ususally /etc/vsftpd/vsftpd.conf, and adjust \end_layout \begin_layout Code + listen_ipv6=yes \end_layout @@ -15781,22 +17058,27 @@ Edit the configuration file, ususally /etc/proftpd.conf, but take care, not \end_layout \begin_layout Code + \end_layout \begin_layout Code + ... \end_layout \begin_layout Code + Bind 2001:0DB8::1 \end_layout \begin_layout Code + ... \end_layout \begin_layout Code + \end_layout @@ -15996,30 +17278,37 @@ struct sockaddr_in \end_layout \begin_layout Code + struct sockaddr_in \end_layout \begin_layout Code + { \end_layout \begin_layout Code + sa_family_t sin_family; \end_layout \begin_layout Code + in_port_t sin_port; \end_layout \begin_layout Code + struct in_addr sin_addr; \end_layout \begin_layout Code + /* Plus some padding for alignment */ \end_layout \begin_layout Code + }; \end_layout @@ -16071,34 +17360,42 @@ struct sockaddr_in6 \end_layout \begin_layout Code + struct sockaddr_in6 \end_layout \begin_layout Code + { \end_layout \begin_layout Code + sa_family_t sin6_family; \end_layout \begin_layout Code + in_port_t sin6_port; \end_layout \begin_layout Code + uint32_t sin6_flowinfo; \end_layout \begin_layout Code + struct in6_addr sin6_addr; \end_layout \begin_layout Code + uint32_t sin6_scope_id; \end_layout \begin_layout Code + }; \end_layout @@ -16212,6 +17509,7 @@ fe80::1%eth1 \end_layout \begin_layout Code + Host A (fe80::1) ---- eth0 ---- Host B ---- eth1 ---- Host C (fe80::1) \end_layout @@ -16320,26 +17618,32 @@ recvfrom(2) \end_layout \begin_layout Code + ssize_t recvfrom( int s, \end_layout \begin_layout Code + void *buf, \end_layout \begin_layout Code + size_t len, \end_layout \begin_layout Code + int flags, \end_layout \begin_layout Code + struct sockaddr *from, \end_layout \begin_layout Code + socklen_t *fromlen ); \end_layout @@ -16365,84 +17669,104 @@ struct sockaddr_storage \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Read a message from a remote peer, and return a buffer pointer to \end_layout \begin_layout Code + ** the caller. \end_layout \begin_layout Code + ** \end_layout \begin_layout Code + ** 's' is the file descriptor for the socket. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + char *rcvMsg( int s ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + static char bfr[ 1025 ]; /* Where the msg is stored. */ \end_layout \begin_layout Code + ssize_t count; \end_layout \begin_layout Code + struct sockaddr_storage ss; /* Where the peer adr goes. */ \end_layout \begin_layout Code + socklen_t sslen; \end_layout \begin_layout Code + sslen = sizeof( ss ); \end_layout \begin_layout Code + count = recvfrom( s, \end_layout \begin_layout Code + bfr, \end_layout \begin_layout Code + sizeof( bfr ) - 1, \end_layout \begin_layout Code + 0, \end_layout \begin_layout Code + (struct sockaddr*) &ss, \end_layout \begin_layout Code + &sslen ); \end_layout \begin_layout Code + bfr[ count ] = ' \backslash 0'; /* Null-terminates the message. @@ -16450,10 +17774,12 @@ char *rcvMsg( int s ) \end_layout \begin_layout Code + return bfr; \end_layout \begin_layout Code + } /* End rcvMsg() */ \end_layout @@ -16520,18 +17846,22 @@ getaddrinfo(3) \end_layout \begin_layout Code + int getaddrinfo( const char *node, \end_layout \begin_layout Code + const char *service, \end_layout \begin_layout Code + const struct addrinfo *hints, \end_layout \begin_layout Code + struct addrinfo **res ); \end_layout @@ -16590,46 +17920,57 @@ struct addrinfo \end_layout \begin_layout Code + struct addrinfo \end_layout \begin_layout Code + { \end_layout \begin_layout Code + int ai_flags; \end_layout \begin_layout Code + int ai_family; \end_layout \begin_layout Code + int ai_socktype; \end_layout \begin_layout Code + int ai_protocol; \end_layout \begin_layout Code + socklen_t ai_addrlen; \end_layout \begin_layout Code + struct sockaddr *ai_addr; \end_layout \begin_layout Code + char *ai_canonname; \end_layout \begin_layout Code + struct addrinfo *ai_next; \end_layout \begin_layout Code + }; \end_layout @@ -17038,30 +18379,37 @@ struct sockaddr \end_layout \begin_layout Code + int getnameinfo( const struct sockaddr *sa, \end_layout \begin_layout Code + socklen_t salen, \end_layout \begin_layout Code + char *host, \end_layout \begin_layout Code + size_t hostlen, \end_layout \begin_layout Code + char *serv, \end_layout \begin_layout Code + size_t servlen, \end_layout \begin_layout Code + int flags ); \end_layout @@ -17160,6 +18508,7 @@ For security reasons that this author won't pretend to understand, "IPv4 \end_layout \begin_layout Code + ::ffff:192.0.2.1 \end_layout @@ -17230,18 +18579,22 @@ It is possible to assign a hostname to an IPv6 network address in \end_layout \begin_layout Code + ::1 localhost \end_layout \begin_layout Code + 127.0.0.1 localhost \end_layout \begin_layout Code + fe80::2c0:8cff:fe01:2345 pt141 \end_layout \begin_layout Code + 192.0.2.1 pt141 \end_layout @@ -17346,6 +18699,7 @@ The server code is found in file tod6d.c (time-of-day IPv6 daemon). \end_layout \begin_layout Code + tod6d [-v] [service] \end_layout @@ -17372,257 +18726,314 @@ The server handles both TCP and UDP requests on the network. \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * File: tod6d.c \end_layout \begin_layout Code + * Description: Contains source code for an IPv6-capable 'daytime' server. \end_layout \begin_layout Code + * Author: John Wenker, Sr. Software Engineer, \end_layout \begin_layout Code + * Performance Technologies, San Diego, USA \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** System header files. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #include /* errno declaration & error codes. */ \end_layout \begin_layout Code + #include /* getaddrinfo(3) et al. */ \end_layout \begin_layout Code + #include /* sockaddr_in & sockaddr_in6 definition. */ \end_layout \begin_layout Code + #include /* printf(3) et al. */ \end_layout \begin_layout Code + #include /* exit(2). */ \end_layout \begin_layout Code + #include /* String manipulation & memory functions. */ \end_layout \begin_layout Code + #include /* poll(2) and related definitions. */ \end_layout \begin_layout Code + #include /* Socket functions (socket(2), bind(2), etc). */ \end_layout \begin_layout Code + #include /* time(2) & ctime(3). */ \end_layout \begin_layout Code + #include /* getopt(3), read(2), etc. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Constants. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #define DFLT_SERVICE "daytime" /* Default service name. */ \end_layout \begin_layout Code + #define INVALID_DESC -1 /* Invalid file descriptor. */ \end_layout \begin_layout Code + #define MAXCONNQLEN 3 /* Max nbr of connection requests to queue. */ \end_layout \begin_layout Code + #define MAXTCPSCKTS 2 /* One TCP socket for IPv4 & one for IPv6. */ \end_layout \begin_layout Code + #define MAXUDPSCKTS 2 /* One UDP socket for IPv4 & one for IPv6. */ \end_layout \begin_layout Code + #define VALIDOPTS "v" /* Valid command options. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Simple boolean type definition. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + typedef enum { false = 0, true } boolean; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Prototypes for internal helper functions. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static int openSckt( const char *service, \end_layout \begin_layout Code + const char *protocol, \end_layout \begin_layout Code + int desc[ ], \end_layout \begin_layout Code + size_t *descSize ); \end_layout \begin_layout Code + static void tod( int tSckt[ ], \end_layout \begin_layout Code + size_t tScktSize, \end_layout \begin_layout Code + int uSckt[ ], \end_layout \begin_layout Code + size_t uScktSize ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Global (within this file only) data objects. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static char hostBfr[ NI_MAXHOST ]; /* For use w/getnameinfo(3). */ \end_layout \begin_layout Code + static const char *pgmName; /* Program name w/o dir prefix. */ \end_layout \begin_layout Code + static char servBfr[ NI_MAXSERV ]; /* For use w/getnameinfo(3). */ \end_layout \begin_layout Code + static boolean verbose = false; /* Verbose mode indication. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Usage macro for command syntax violations. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #define USAGE \backslash \end_layout \begin_layout Code + { \backslash \end_layout \begin_layout Code + fprintf( stderr, \backslash \end_layout \begin_layout Code + "Usage: %s [-v] [service] \backslash n", @@ -17631,37 +19042,44 @@ n", \end_layout \begin_layout Code + pgmName ); \backslash \end_layout \begin_layout Code + exit( 127 ); \backslash \end_layout \begin_layout Code + } /* End USAGE macro. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Macro to terminate the program if a system call error occurs. The system \end_layout \begin_layout Code + ** call must be one of the usual type that returns -1 on error. This macro is \end_layout \begin_layout Code + ** a modified version of a macro authored by Dr. V. Vinge, SDSU Dept. @@ -17669,56 +19087,66 @@ n", \end_layout \begin_layout Code + ** Computer Science (retired)... best professor I ever had. I hear he writes \end_layout \begin_layout Code + ** great science fiction in addition to robust code, too. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #define CHK(expr) \backslash \end_layout \begin_layout Code + do \backslash \end_layout \begin_layout Code + { \backslash \end_layout \begin_layout Code + if ( (expr) == -1 ) \backslash \end_layout \begin_layout Code + { \backslash \end_layout \begin_layout Code + fprintf( stderr, \backslash \end_layout \begin_layout Code + "%s (line %d): System call ERROR - %s. \backslash n", @@ -17727,30 +19155,35 @@ n", \end_layout \begin_layout Code + pgmName, \backslash \end_layout \begin_layout Code + __LINE__, \backslash \end_layout \begin_layout Code + strerror( errno ) ); \backslash \end_layout \begin_layout Code + exit( 1 ); \backslash \end_layout \begin_layout Code + } /* End IF system call failed. */ \backslash @@ -17758,352 +19191,436 @@ n", \end_layout \begin_layout Code + } while ( false ) \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: main \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Set up a time-of-day server and handle network requests. This server \end_layout \begin_layout Code + * handles both TCP and UDP requests. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * The usual argc and argv parameters to a main() function. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: \end_layout \begin_layout Code + * This is a daemon program and never returns. However, in the degenerate \end_layout \begin_layout Code + * case where no sockets are created, the function returns zero. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + int main( int argc, \end_layout \begin_layout Code + char *argv[ ] ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + int opt; \end_layout \begin_layout Code + const char *service = DFLT_SERVICE; \end_layout \begin_layout Code + int tSckt[ MAXTCPSCKTS ]; /* Array of TCP socket descriptors. */ \end_layout \begin_layout Code + size_t tScktSize = MAXTCPSCKTS; /* Size of uSckt (# of elements). */ \end_layout \begin_layout Code + int uSckt[ MAXUDPSCKTS ]; /* Array of UDP socket descriptors. */ \end_layout \begin_layout Code + size_t uScktSize = MAXUDPSCKTS; /* Size of uSckt (# of elements). */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Set the program name (w/o directory prefix). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + pgmName = strrchr( argv[ 0 ], '/' ); \end_layout \begin_layout Code + pgmName = pgmName == NULL ? argv[ 0 ] : pgmName + 1; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Process command options. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + opterr = 0; /* Turns off "invalid option" error messages. */ \end_layout \begin_layout Code + while ( ( opt = getopt( argc, argv, VALIDOPTS ) ) >= 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + switch ( opt ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case 'v': /* Verbose mode. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + verbose = true; \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + default: \end_layout \begin_layout Code + { \end_layout \begin_layout Code + USAGE; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End SWITCH on command option. */ \end_layout \begin_layout Code + } /* End WHILE processing options. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Process command line arguments. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + switch ( argc - optind ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case 0: break; \end_layout \begin_layout Code + case 1: service = argv[ optind ]; break; \end_layout \begin_layout Code + default: USAGE; \end_layout \begin_layout Code + } /* End SWITCH on number of command line arguments. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Open both a TCP and UDP socket, for both IPv4 & IPv6, on which to receive \end_layout \begin_layout Code + ** service requests. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ( openSckt( service, "tcp", tSckt, &tScktSize ) < 0 ) || \end_layout \begin_layout Code + ( openSckt( service, "udp", uSckt, &uScktSize ) < 0 ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + exit( 1 ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Run the time-of-day server. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ( tScktSize > 0 ) || ( uScktSize > 0 ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + tod( tSckt, /* tod() never returns. */ \end_layout \begin_layout Code + tScktSize, \end_layout \begin_layout Code + uSckt, \end_layout \begin_layout Code + uScktSize ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Since tod() never returns, execution only gets here if no sockets were \end_layout \begin_layout Code + ** created. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s: No sockets opened... terminating. \backslash @@ -18111,286 +19628,354 @@ n", \end_layout \begin_layout Code + pgmName ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + return 0; \end_layout \begin_layout Code + } /* End main() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: openSckt \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Open passive (server) sockets for the indicated inet service & protocol. \end_layout \begin_layout Code + * Notice in the last sentence that "sockets" is plural. During the interim \end_layout \begin_layout Code + * transition period while everyone is switching over to IPv6, the server \end_layout \begin_layout Code + * application has to open two sockets on which to listen for connections... \end_layout \begin_layout Code + * one for IPv4 traffic and one for IPv6 traffic. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * service - Pointer to a character string representing the well-known port \end_layout \begin_layout Code + * on which to listen (can be a service name or a decimal number). \end_layout \begin_layout Code + * protocol - Pointer to a character string representing the transport layer \end_layout \begin_layout Code + * protocol (only "tcp" or "udp" are valid). \end_layout \begin_layout Code + * desc - Pointer to an array into which the socket descriptors are \end_layout \begin_layout Code + * placed when opened. \end_layout \begin_layout Code + * descSize - This is a value-result parameter. On input, it contains the \end_layout \begin_layout Code + * max number of descriptors that can be put into 'desc' (i.e. the \end_layout \begin_layout Code + * number of elements in the array). Upon return, it will contain \end_layout \begin_layout Code + * the number of descriptors actually opened. Any unused slots in \end_layout \begin_layout Code + * 'desc' are set to INVALID_DESC. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: \end_layout \begin_layout Code + * 0 on success, -1 on error. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + static int openSckt( const char *service, \end_layout \begin_layout Code + const char *protocol, \end_layout \begin_layout Code + int desc[ ], \end_layout \begin_layout Code + size_t *descSize ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct addrinfo *ai; \end_layout \begin_layout Code + int aiErr; \end_layout \begin_layout Code + struct addrinfo *aiHead; \end_layout \begin_layout Code + struct addrinfo hints = { .ai_flags = AI_PASSIVE, /* Server mode. \end_layout \begin_layout Code + ¬ */ \end_layout \begin_layout Code + .ai_family = PF_UNSPEC }; /* IPv4 or IPv6. \end_layout \begin_layout Code + ¬ */ \end_layout \begin_layout Code + size_t maxDescs = *descSize; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Initialize output parameters. When the loop completes, *descSize is 0. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + while ( *descSize > 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + desc[ --( *descSize ) ] = INVALID_DESC; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Check which protocol is selected (only TCP and UDP are valid). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( strcmp( protocol, "tcp" ) == 0 ) /* TCP protocol. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + hints.ai_socktype = SOCK_STREAM; \end_layout \begin_layout Code + hints.ai_protocol = IPPROTO_TCP; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + else if ( strcmp( protocol, "udp" ) == 0 ) /* UDP protocol. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + hints.ai_socktype = SOCK_DGRAM; \end_layout \begin_layout Code + hints.ai_protocol = IPPROTO_UDP; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + else /* Invalid protocol. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - Unknown transport " \end_layout \begin_layout Code + "layer protocol \backslash "%s @@ -18401,191 +19986,235 @@ n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + protocol ); \end_layout \begin_layout Code + return -1; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Look up the service's well-known port number. Notice that NULL is being \end_layout \begin_layout Code + ** passed for the 'node' parameter, and that the AI_PASSIVE flag is set in \end_layout \begin_layout Code + ** 'hints'. Thus, the program is requesting passive address information. \end_layout \begin_layout Code + ** The network address is initialized to :: (all zeros) for IPv6 records, or \end_layout \begin_layout Code + ** 0.0.0.0 for IPv4 records. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ( aiErr = getaddrinfo( NULL, \end_layout \begin_layout Code + service, \end_layout \begin_layout Code + &hints, \end_layout \begin_layout Code + &aiHead ) ) != 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - %s. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + gai_strerror( aiErr ) ); \end_layout \begin_layout Code + return -1; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** For each of the address records returned, attempt to set up a passive \end_layout \begin_layout Code + ** socket. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + for ( ai = aiHead; \end_layout \begin_layout Code + ( ai != NULL ) && ( *descSize < maxDescs ); \end_layout \begin_layout Code + ai = ai->ai_next ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + if ( verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the current address info. Start with the protocol- \end_layout \begin_layout Code + ** independent fields first. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "Setting up a passive socket based on the " \end_layout \begin_layout Code + "following address info: \backslash n" \end_layout \begin_layout Code + " ai_flags = 0x%02X \backslash n" \end_layout \begin_layout Code + " ai_family = %d (PF_INET = %d, PF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " ai_socktype = %d (SOCK_STREAM = %d, SOCK_DGRAM = %d) \backslash @@ -18593,6 +20222,7 @@ n" \end_layout \begin_layout Code + " ai_protocol = %d (IPPROTO_TCP = %d, IPPROTO_UDP = %d) \backslash @@ -18600,512 +20230,629 @@ n" \end_layout \begin_layout Code + " ai_addrlen = %d (sockaddr_in = %d, " \end_layout \begin_layout Code + "sockaddr_in6 = %d) \backslash n", \end_layout \begin_layout Code + ai->ai_flags, \end_layout \begin_layout Code + ai->ai_family, \end_layout \begin_layout Code + PF_INET, \end_layout \begin_layout Code + PF_INET6, \end_layout \begin_layout Code + ai->ai_socktype, \end_layout \begin_layout Code + SOCK_STREAM, \end_layout \begin_layout Code + SOCK_DGRAM, \end_layout \begin_layout Code + ai->ai_protocol, \end_layout \begin_layout Code + IPPROTO_TCP, \end_layout \begin_layout Code + IPPROTO_UDP, \end_layout \begin_layout Code + ai->ai_addrlen, \end_layout \begin_layout Code + sizeof( struct sockaddr_in ), \end_layout \begin_layout Code + sizeof( struct sockaddr_in6 ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Now display the protocol-specific formatted socket address. Note \end_layout \begin_layout Code + ** that the program is requesting that getnameinfo(3) convert the \end_layout \begin_layout Code + ** host & service into numeric strings. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + getnameinfo( ai->ai_addr, \end_layout \begin_layout Code + ai->ai_addrlen, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + sizeof( hostBfr ), \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + sizeof( servBfr ), \end_layout \begin_layout Code + NI_NUMERICHOST | NI_NUMERICSERV ); \end_layout \begin_layout Code + switch ( ai->ai_family ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case PF_INET: /* IPv4 address record. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct sockaddr_in *p = (struct sockaddr_in*) ai->ai_addr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " ai_addr = sin_family: %d (AF_INET = %d, " \end_layout \begin_layout Code + "AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " sin_addr: %s \backslash n" \end_layout \begin_layout Code + " sin_port: %s \backslash n", \end_layout \begin_layout Code + p->sin_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv4. */ \end_layout \begin_layout Code + case PF_INET6: /* IPv6 address record. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct sockaddr_in6 *p = (struct sockaddr_in6*) ai->ai_addr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " ai_addr = sin6_family: %d (AF_INET = %d, " \end_layout \begin_layout Code + "AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " sin6_addr: %s \backslash n" \end_layout \begin_layout Code + " sin6_port: %s \backslash n" \end_layout \begin_layout Code + " sin6_flowinfo: %d \backslash n" \end_layout \begin_layout Code + " sin6_scope_id: %d \backslash n", \end_layout \begin_layout Code + p->sin6_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + p->sin6_flowinfo, \end_layout \begin_layout Code + p->sin6_scope_id ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv6. */ \end_layout \begin_layout Code + default: /* Can never get here, but just for completeness. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - Unknown protocol family (%d). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + ai->ai_family ); \end_layout \begin_layout Code + freeaddrinfo( aiHead ); \end_layout \begin_layout Code + return -1; \end_layout \begin_layout Code + } /* End DEFAULT case (unknown protocol family). */ \end_layout \begin_layout Code + } /* End SWITCH on protocol family. */ \end_layout \begin_layout Code + } /* End IF verbose mode. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Create a socket using the info in the addrinfo structure. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + CHK( desc[ *descSize ] = socket( ai->ai_family, \end_layout \begin_layout Code + ai->ai_socktype, \end_layout \begin_layout Code + ai->ai_protocol ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Here is the code that prevents "IPv4 mapped addresses", as discussed \end_layout \begin_layout Code + ** in Section 22.1.3.1. If an IPv6 socket was just created, then set the \end_layout \begin_layout Code + ** IPV6_V6ONLY socket option. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ai->ai_family == PF_INET6 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + #if defined( IPV6_V6ONLY ) \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Disable IPv4 mapped addresses. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + int v6Only = 1; \end_layout \begin_layout Code + CHK( setsockopt( desc[ *descSize ], \end_layout \begin_layout Code + IPPROTO_IPV6, \end_layout \begin_layout Code + IPV6_V6ONLY, \end_layout \begin_layout Code + &v6Only, \end_layout \begin_layout Code + sizeof( v6Only ) ) ); \end_layout \begin_layout Code + #else \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** IPV6_V6ONLY is not defined, so the socket option can't be set and \end_layout \begin_layout Code + ** thus IPv4 mapped addresses can't be disabled. Print a warning \end_layout \begin_layout Code + ** message and close the socket. Design note: If the \end_layout \begin_layout Code + ** #if...#else...#endif construct were removed, then this program \end_layout \begin_layout Code + ** would not compile (because IPV6_V6ONLY isn't defined). That's an \end_layout \begin_layout Code + ** acceptable approach; IPv4 mapped addresses are certainly disabled \end_layout \begin_layout Code + ** if the program can't build! However, since this program is also \end_layout \begin_layout Code + ** designed to work for IPv4 sockets as well as IPv6, I decided to \end_layout \begin_layout Code + ** allow the program to compile when IPV6_V6ONLY is not defined, and \end_layout \begin_layout Code + ** turn it into a run-time warning rather than a compile-time error. \end_layout \begin_layout Code + ** IPv4 mapped addresses are still disabled because _all_ IPv6 traffic \end_layout \begin_layout Code + ** is disabled (all IPv6 sockets are closed here), but at least this \end_layout \begin_layout Code + ** way the server can still service IPv4 network traffic. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): WARNING - Cannot set IPV6_V6ONLY socket " \end_layout \begin_layout Code + "option. Closing IPv6 %s socket. \backslash @@ -19113,556 +20860,690 @@ n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + ai->ai_protocol == IPPROTO_TCP ? "TCP" : "UDP" ); \end_layout \begin_layout Code + CHK( close( desc[ *descSize ] ) ); \end_layout \begin_layout Code + continue; /* Go to top of FOR loop w/o updating *descSize! */ \end_layout \begin_layout Code + #endif /* IPV6_V6ONLY */ \end_layout \begin_layout Code + } /* End IF this is an IPv6 socket. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Bind the socket. Again, the info from the addrinfo structure is used. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + CHK( bind( desc[ *descSize ], \end_layout \begin_layout Code + ai->ai_addr, \end_layout \begin_layout Code + ai->ai_addrlen ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** If this is a TCP socket, put the socket into passive listening mode \end_layout \begin_layout Code + ** (listen is only valid on connection-oriented sockets). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ai->ai_socktype == SOCK_STREAM ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + CHK( listen( desc[ *descSize ], \end_layout \begin_layout Code + MAXCONNQLEN ) ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Socket set up okay. Bump index to next descriptor array element. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + *descSize += 1; \end_layout \begin_layout Code + } /* End FOR each address info structure returned. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Dummy check for unused address records. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( verbose && ( ai != NULL ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): WARNING - Some address records were " \end_layout \begin_layout Code + "not processed due to insufficient array space. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__ ); \end_layout \begin_layout Code + } /* End IF verbose and some address records remain unprocessed. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Clean up. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + freeaddrinfo( aiHead ); \end_layout \begin_layout Code + return 0; \end_layout \begin_layout Code + } /* End openSckt() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: tod \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Listen on a set of sockets and send the current time-of-day to any \end_layout \begin_layout Code + * clients. This function never returns. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * tSckt - Array of TCP socket descriptors on which to listen. \end_layout \begin_layout Code + * tScktSize - Size of the tSckt array (nbr of elements). \end_layout \begin_layout Code + * uSckt - Array of UDP socket descriptors on which to listen. \end_layout \begin_layout Code + * uScktSize - Size of the uSckt array (nbr of elements). \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: None. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + static void tod( int tSckt[ ], \end_layout \begin_layout Code + size_t tScktSize, \end_layout \begin_layout Code + int uSckt[ ], \end_layout \begin_layout Code + size_t uScktSize ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + char bfr[ 256 ]; \end_layout \begin_layout Code + ssize_t count; \end_layout \begin_layout Code + struct pollfd *desc; \end_layout \begin_layout Code + size_t descSize = tScktSize + uScktSize; \end_layout \begin_layout Code + int idx; \end_layout \begin_layout Code + int newSckt; \end_layout \begin_layout Code + struct sockaddr *sadr; \end_layout \begin_layout Code + socklen_t sadrLen; \end_layout \begin_layout Code + struct sockaddr_storage sockStor; \end_layout \begin_layout Code + int status; \end_layout \begin_layout Code + size_t timeLen; \end_layout \begin_layout Code + char *timeStr; \end_layout \begin_layout Code + time_t timeVal; \end_layout \begin_layout Code + ssize_t wBytes; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Allocate memory for the poll(2) array. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + desc = malloc( descSize * sizeof( struct pollfd ) ); \end_layout \begin_layout Code + if ( desc == NULL ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - %s. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + strerror( ENOMEM ) ); \end_layout \begin_layout Code + exit( 1 ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Initialize the poll(2) array. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + for ( idx = 0; idx < descSize; idx++ ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + desc[ idx ].fd = idx < tScktSize ? tSckt[ idx ] \end_layout \begin_layout Code + : uSckt[ idx - tScktSize ]; \end_layout \begin_layout Code + desc[ idx ].events = POLLIN; \end_layout \begin_layout Code + desc[ idx ].revents = 0; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Main time-of-day server loop. Handles both TCP & UDP requests. This is \end_layout \begin_layout Code + ** an interative server, and all requests are handled directly within the \end_layout \begin_layout Code + ** main loop. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + while ( true ) /* Do forever. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Wait for activity on one of the sockets. The DO..WHILE construct is \end_layout \begin_layout Code + ** used to restart the system call in the event the process is \end_layout \begin_layout Code + ** interrupted by a signal. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + do \end_layout \begin_layout Code + { \end_layout \begin_layout Code + status = poll( desc, \end_layout \begin_layout Code + descSize, \end_layout \begin_layout Code + -1 /* Wait indefinitely for input. */ ); \end_layout \begin_layout Code + } while ( ( status < 0 ) && ( errno == EINTR ) ); \end_layout \begin_layout Code + CHK( status ); /* Check for a bona fide system call error. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Get the current time. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + timeVal = time( NULL ); \end_layout \begin_layout Code + timeStr = ctime( &timeVal ); \end_layout \begin_layout Code + timeLen = strlen( timeStr ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Indicate that there is new network activity. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + char *s = malloc( timeLen+1 ); \end_layout \begin_layout Code + strcpy( s, timeStr ); \end_layout \begin_layout Code + s[ timeLen-1 ] = ' \backslash 0'; /* Overwrite ' @@ -19672,743 +21553,913 @@ n' in date string. \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s: New network activity on %s. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + s ); \end_layout \begin_layout Code + free( s ); \end_layout \begin_layout Code + } /* End IF verbose. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Process sockets with input available. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + for ( idx = 0; idx < descSize; idx++ ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + switch ( desc[ idx ].revents ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case 0: /* No activity on this socket; try the next. */ \end_layout \begin_layout Code + continue; \end_layout \begin_layout Code + case POLLIN: /* Network activity. Go process it. */ \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + default: /* Invalid poll events. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - Invalid poll event (0x%02X). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + desc[ idx ].revents ); \end_layout \begin_layout Code + exit( 1 ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End SWITCH on returned poll events. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Determine if this is a TCP request or UDP request. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( idx < tScktSize ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** TCP connection requested. Accept it. Notice the use of \end_layout \begin_layout Code + ** the sockaddr_storage data type. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + sadrLen = sizeof( sockStor ); \end_layout \begin_layout Code + sadr = (struct sockaddr*) &sockStor; \end_layout \begin_layout Code + CHK( newSckt = accept( desc[ idx ].fd, \end_layout \begin_layout Code + sadr, \end_layout \begin_layout Code + &sadrLen ) ); \end_layout \begin_layout Code + CHK( shutdown( newSckt, /* Server never recv's anything. */ \end_layout \begin_layout Code + SHUT_RD ) ); \end_layout \begin_layout Code + if ( verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the socket address of the remote client. Begin with \end_layout \begin_layout Code + ** the address-independent fields. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "Sockaddr info for new TCP client: \backslash n" \end_layout \begin_layout Code + " sa_family = %d (AF_INET = %d, AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " addr len = %d (sockaddr_in = %d, " \end_layout \begin_layout Code + "sockaddr_in6 = %d) \backslash n", \end_layout \begin_layout Code + sadr->sa_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + sadrLen, \end_layout \begin_layout Code + sizeof( struct sockaddr_in ), \end_layout \begin_layout Code + sizeof( struct sockaddr_in6 ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the address-specific fields. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + getnameinfo( sadr, \end_layout \begin_layout Code + sadrLen, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + sizeof( hostBfr ), \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + sizeof( servBfr ), \end_layout \begin_layout Code + NI_NUMERICHOST | NI_NUMERICSERV ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Notice that we're switching on an address family now, not a \end_layout \begin_layout Code + ** protocol family. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + switch ( sadr->sa_family ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case AF_INET: /* IPv4 address. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct sockaddr_in *p = (struct sockaddr_in*) sadr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " sin_addr = sin_family: %d \backslash n" \end_layout \begin_layout Code + " sin_addr: %s \backslash n" \end_layout \begin_layout Code + " sin_port: %s \backslash n", \end_layout \begin_layout Code + p->sin_family, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv4. */ \end_layout \begin_layout Code + case AF_INET6: /* IPv6 address. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct sockaddr_in6 *p = (struct sockaddr_in6*) sadr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " sin6_addr = sin6_family: %d \backslash n" \end_layout \begin_layout Code + " sin6_addr: %s \backslash n" \end_layout \begin_layout Code + " sin6_port: %s \backslash n" \end_layout \begin_layout Code + " sin6_flowinfo: %d \backslash n" \end_layout \begin_layout Code + " sin6_scope_id: %d \backslash n", \end_layout \begin_layout Code + p->sin6_family, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + p->sin6_flowinfo, \end_layout \begin_layout Code + p->sin6_scope_id ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv6. */ \end_layout \begin_layout Code + default: /* Can never get here, but for completeness. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - Unknown address " \end_layout \begin_layout Code + "family (%d). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + sadr->sa_family ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End DEFAULT case (unknown address family). */ \end_layout \begin_layout Code + } /* End SWITCH on address family. */ \end_layout \begin_layout Code + } /* End IF verbose mode. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Send the TOD to the client. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + wBytes = timeLen; \end_layout \begin_layout Code + while ( wBytes > 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + do \end_layout \begin_layout Code + { \end_layout \begin_layout Code + count = write( newSckt, \end_layout \begin_layout Code + timeStr, \end_layout \begin_layout Code + wBytes ); \end_layout \begin_layout Code + } while ( ( count < 0 ) && ( errno == EINTR ) ); \end_layout \begin_layout Code + CHK( count ); /* Check for a bona fide error. */ \end_layout \begin_layout Code + wBytes -= count; \end_layout \begin_layout Code + } /* End WHILE there is data to send. */ \end_layout \begin_layout Code + CHK( close( newSckt ) ); \end_layout \begin_layout Code + } /* End IF this was a TCP connection request. */ \end_layout \begin_layout Code + else \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** This is a UDP socket, and a datagram is available. The funny \end_layout \begin_layout Code + ** thing about UDP requests is that this server doesn't require any \end_layout \begin_layout Code + ** client input; but it can't send the TOD unless it knows a client \end_layout \begin_layout Code + ** wants the data, and the only way that can occur with UDP is if \end_layout \begin_layout Code + ** the server receives a datagram from the client. Thus, the \end_layout \begin_layout Code + ** server must receive _something_, but the content of the datagram \end_layout \begin_layout Code + ** is irrelevant. Read in the datagram. Again note the use of \end_layout \begin_layout Code + ** sockaddr_storage to receive the address. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + sadrLen = sizeof( sockStor ); \end_layout \begin_layout Code + sadr = (struct sockaddr*) &sockStor; \end_layout \begin_layout Code + CHK( count = recvfrom( desc[ idx ].fd, \end_layout \begin_layout Code + bfr, \end_layout \begin_layout Code + sizeof( bfr ), \end_layout \begin_layout Code + 0, \end_layout \begin_layout Code + sadr, \end_layout \begin_layout Code + &sadrLen ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display whatever was received on stdout. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + ssize_t rBytes = count; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s: UDP datagram received (%d bytes). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + count ); \end_layout \begin_layout Code + while ( count > 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fputc( bfr[ rBytes - count-- ], \end_layout \begin_layout Code + stdout ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + if ( bfr[ rBytes-1 ] != ' \backslash n' ) \end_layout \begin_layout Code + fputc( ' \backslash n', stdout ); /* Newline also flushes stdout. @@ -20416,403 +22467,493 @@ n', stdout ); /* Newline also flushes stdout. \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the socket address of the remote client. Address- \end_layout \begin_layout Code + ** independent fields first. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "Remote client's sockaddr info: \backslash n" \end_layout \begin_layout Code + " sa_family = %d (AF_INET = %d, AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " addr len = %d (sockaddr_in = %d, " \end_layout \begin_layout Code + "sockaddr_in6 = %d) \backslash n", \end_layout \begin_layout Code + sadr->sa_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + sadrLen, \end_layout \begin_layout Code + sizeof( struct sockaddr_in ), \end_layout \begin_layout Code + sizeof( struct sockaddr_in6 ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the address-specific information. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + getnameinfo( sadr, \end_layout \begin_layout Code + sadrLen, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + sizeof( hostBfr ), \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + sizeof( servBfr ), \end_layout \begin_layout Code + NI_NUMERICHOST | NI_NUMERICSERV ); \end_layout \begin_layout Code + switch ( sadr->sa_family ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case AF_INET: /* IPv4 address. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct sockaddr_in *p = (struct sockaddr_in*) sadr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " sin_addr = sin_family: %d \backslash n" \end_layout \begin_layout Code + " sin_addr: %s \backslash n" \end_layout \begin_layout Code + " sin_port: %s \backslash n", \end_layout \begin_layout Code + p->sin_family, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv4 address. */ \end_layout \begin_layout Code + case AF_INET6: /* IPv6 address. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct sockaddr_in6 *p = (struct sockaddr_in6*) sadr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " sin6_addr = sin6_family: %d \backslash n" \end_layout \begin_layout Code + " sin6_addr: %s \backslash n" \end_layout \begin_layout Code + " sin6_port: %s \backslash n" \end_layout \begin_layout Code + " sin6_flowinfo: %d \backslash n" \end_layout \begin_layout Code + " sin6_scope_id: %d \backslash n", \end_layout \begin_layout Code + p->sin6_family, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + p->sin6_flowinfo, \end_layout \begin_layout Code + p->sin6_scope_id ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv6 address. */ \end_layout \begin_layout Code + default: /* Can never get here, but for completeness. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - Unknown address " \end_layout \begin_layout Code + "family (%d). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + sadr->sa_family ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End DEFAULT case (unknown address family). */ \end_layout \begin_layout Code + } /* End SWITCH on address family. */ \end_layout \begin_layout Code + } /* End IF verbose mode. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Send the time-of-day to the client. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + wBytes = timeLen; \end_layout \begin_layout Code + while ( wBytes > 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + do \end_layout \begin_layout Code + { \end_layout \begin_layout Code + count = sendto( desc[ idx ].fd, \end_layout \begin_layout Code + timeStr, \end_layout \begin_layout Code + wBytes, \end_layout \begin_layout Code + 0, \end_layout \begin_layout Code + sadr, /* Address & address length */ \end_layout \begin_layout Code + sadrLen ); /* received in recvfrom(). */ \end_layout \begin_layout Code + } while ( ( count < 0 ) && ( errno == EINTR ) ); \end_layout \begin_layout Code + CHK( count ); /* Check for a bona fide error. */ \end_layout \begin_layout Code + wBytes -= count; \end_layout \begin_layout Code + } /* End WHILE there is data to send. */ \end_layout \begin_layout Code + } /* End ELSE a UDP datagram is available. */ \end_layout \begin_layout Code + desc[ idx ].revents = 0; /* Clear the returned poll events. */ \end_layout \begin_layout Code + } /* End FOR each socket descriptor. */ \end_layout \begin_layout Code + } /* End WHILE forever. */ \end_layout \begin_layout Code + } /* End tod() */ \end_layout @@ -20827,6 +22968,7 @@ The TCP client code is found in file tod6tc.c (time-of-day IPv6 TCP client). \end_layout \begin_layout Code + tod6tc [-v] [-s scope_id] [host [service]] \end_layout @@ -20867,216 +23009,265 @@ The TCP client source code contained in tod6tc.c follows: \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * File: tod6tc.c \end_layout \begin_layout Code + * Description: Contains source code for an IPv6-capable 'daytime' TCP client. \end_layout \begin_layout Code + * Author: John Wenker, Sr. Software Engineer \end_layout \begin_layout Code + * Performance Technologies, San Diego, USA \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** System header files. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #include /* errno declaration and error codes. */ \end_layout \begin_layout Code + #include /* if_nametoindex(3). */ \end_layout \begin_layout Code + #include /* getaddrinfo(3) and associated definitions. */ \end_layout \begin_layout Code + #include /* sockaddr_in and sockaddr_in6 definitions. */ \end_layout \begin_layout Code + #include /* printf(3) et al. */ \end_layout \begin_layout Code + #include /* exit(2). */ \end_layout \begin_layout Code + #include /* String manipulation and memory functions. */ \end_layout \begin_layout Code + #include /* Socket functions (socket(2), connect(2), etc). */ \end_layout \begin_layout Code + #include /* getopt(3), read(2), etc. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Constants & macros. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #define DFLT_HOST "localhost" /* Default server name. */ \end_layout \begin_layout Code + #define DFLT_SCOPE_ID "eth0" /* Default scope identifier. */ \end_layout \begin_layout Code + #define DFLT_SERVICE "daytime" /* Default service name. */ \end_layout \begin_layout Code + #define INVALID_DESC -1 /* Invalid file (socket) descriptor. */ \end_layout \begin_layout Code + #define MAXBFRSIZE 256 /* Max bfr sz to read remote TOD. */ \end_layout \begin_layout Code + #define VALIDOPTS "s:v" /* Valid command options. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Type definitions (for convenience). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + typedef enum { false = 0, true } boolean; \end_layout \begin_layout Code + typedef struct sockaddr_in sockaddr_in_t; \end_layout \begin_layout Code + typedef struct sockaddr_in6 sockaddr_in6_t; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Prototypes for internal helper functions. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static int openSckt( const char *host, \end_layout \begin_layout Code + const char *service, \end_layout \begin_layout Code + unsigned int scopeId ); \end_layout \begin_layout Code + static void tod( int sckt ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Global (within this file only) data objects. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static const char *pgmName; /* Program name (w/o directory). */ \end_layout \begin_layout Code + static boolean verbose = false; /* Verbose mode. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Usage macro. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #define USAGE \backslash @@ -21084,6 +23275,7 @@ static boolean verbose = false; /* Verbose mode. \end_layout \begin_layout Code + { \backslash @@ -21091,6 +23283,7 @@ static boolean verbose = false; /* Verbose mode. \end_layout \begin_layout Code + fprintf( stderr, \backslash @@ -21098,6 +23291,7 @@ static boolean verbose = false; /* Verbose mode. \end_layout \begin_layout Code + "Usage: %s [-v] [-s scope_id] [host [service]] \backslash n", @@ -21106,6 +23300,7 @@ n", \end_layout \begin_layout Code + pgmName ); \backslash @@ -21113,6 +23308,7 @@ n", \end_layout \begin_layout Code + exit( 127 ); \backslash @@ -21120,20 +23316,24 @@ n", \end_layout \begin_layout Code + } /* End USAGE macro. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** This "macro" (even though it's really a function) is loosely based on the \end_layout \begin_layout Code + ** CHK() macro by Dr. V. Vinge (see server code). @@ -21141,540 +23341,669 @@ n", \end_layout \begin_layout Code + ** a boolean expression indicating the return code from one of the usual system \end_layout \begin_layout Code + ** calls that returns -1 on error. If a system call error occurred, an alert \end_layout \begin_layout Code + ** is written to stderr. It returns a boolean value indicating success/failure \end_layout \begin_layout Code + ** of the system call. \end_layout \begin_layout Code + ** \end_layout \begin_layout Code + ** Example: if ( !SYSCALL( "write", \end_layout \begin_layout Code + ** count = write( fd, bfr, size ) ) ) \end_layout \begin_layout Code + ** { \end_layout \begin_layout Code + ** // Error processing... but SYSCALL() will have already taken \end_layout \begin_layout Code + ** // care of dumping an error alert to stderr. \end_layout \begin_layout Code + ** } \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static __inline boolean SYSCALL( const char *syscallName, \end_layout \begin_layout Code + int lineNbr, \end_layout \begin_layout Code + int status ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + if ( ( status == -1 ) && verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): System call failed ('%s') - %s. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + lineNbr, \end_layout \begin_layout Code + syscallName, \end_layout \begin_layout Code + strerror( errno ) ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + return status != -1; /* True if the system call was successful. */ \end_layout \begin_layout Code + } /* End SYSCALL() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: main \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Connect to a remote time-of-day service and write the remote host's TOD to \end_layout \begin_layout Code + * stdout. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * The usual argc & argv parameters to a main() program. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: \end_layout \begin_layout Code + * This function always returns zero. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + int main( int argc, \end_layout \begin_layout Code + char *argv[ ] ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + const char *host = DFLT_HOST; \end_layout \begin_layout Code + int opt; \end_layout \begin_layout Code + int sckt; \end_layout \begin_layout Code + unsigned int scopeId = if_nametoindex( DFLT_SCOPE_ID ); \end_layout \begin_layout Code + const char *service = DFLT_SERVICE; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Determine the program name (w/o directory prefix). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + pgmName = (const char*) strrchr( argv[ 0 ], '/' ); \end_layout \begin_layout Code + pgmName = pgmName == NULL ? argv[ 0 ] : pgmName+1; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Process command line options. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + opterr = 0; /* Turns off "invalid option" error messages. */ \end_layout \begin_layout Code + while ( ( opt = getopt( argc, argv, VALIDOPTS ) ) != -1 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + switch ( opt ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case 's': /* Scope identifier (IPv6 kluge). */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + scopeId = if_nametoindex( optarg ); \end_layout \begin_layout Code + if ( scopeId == 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s: Unknown network interface (%s). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + optarg ); \end_layout \begin_layout Code + USAGE; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + case 'v': /* Verbose mode. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + verbose = true; \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + default: \end_layout \begin_layout Code + { \end_layout \begin_layout Code + USAGE; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End SWITCH on command option. */ \end_layout \begin_layout Code + } /* End WHILE processing command options. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Process command arguments. At the end of the above loop, optind is the \end_layout \begin_layout Code + ** index of the first NON-option argv element. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + switch ( argc - optind ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case 2: /* Both host & service are specified on the command line. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + service = argv[ optind + 1 ]; \end_layout \begin_layout Code + /***** Fall through *****/ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + case 1: /* Host is specified on the command line. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + host = argv[ optind ]; \end_layout \begin_layout Code + /***** Fall through *****/ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + case 0: /* Use default host & service. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + default: \end_layout \begin_layout Code + { \end_layout \begin_layout Code + USAGE; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End SWITCH on number of command arguments. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Open a connection to the indicated host/service. \end_layout \begin_layout Code + ** \end_layout \begin_layout Code + ** Note that if all three of the following conditions are met, then the \end_layout \begin_layout Code + ** scope identifier remains unresolved at this point. \end_layout \begin_layout Code + ** 1) The default network interface is unknown for some reason. \end_layout \begin_layout Code + ** 2) The -s option was not used on the command line. \end_layout \begin_layout Code + ** 3) An IPv6 "scoped address" was not specified for the hostname on the \end_layout \begin_layout Code + ** command line. \end_layout \begin_layout Code + ** If the above three conditions are met, then only an IPv4 socket can be \end_layout \begin_layout Code + ** opened (connect(2) fails without the scope ID properly set for IPv6 \end_layout \begin_layout Code + ** sockets). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ( sckt = openSckt( host, \end_layout \begin_layout Code + service, \end_layout \begin_layout Code + scopeId ) ) == INVALID_DESC ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s: Sorry... a connection could not be established. \backslash @@ -21682,524 +24011,646 @@ n", \end_layout \begin_layout Code + pgmName ); \end_layout \begin_layout Code + exit( 1 ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Get the remote time-of-day. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + tod( sckt ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Close the connection and terminate. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + (void) SYSCALL( "close", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + close( sckt ) ); \end_layout \begin_layout Code + return 0; \end_layout \begin_layout Code + } /* End main() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: openSckt \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Sets up a TCP connection to a remote server. Getaddrinfo(3) is used to \end_layout \begin_layout Code + * perform lookup functions and can return multiple address records (i.e. a \end_layout \begin_layout Code + * list of 'struct addrinfo' records). This function traverses the list and \end_layout \begin_layout Code + * tries to establish a connection to the remote server. The function ends \end_layout \begin_layout Code + * when either a connection has been established or all records in the list \end_layout \begin_layout Code + * have been processed. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * host - A pointer to a character string representing the hostname or IP \end_layout \begin_layout Code + * address (IPv4 or IPv6) of the remote server. \end_layout \begin_layout Code + * service - A pointer to a character string representing the service name or \end_layout \begin_layout Code + * well-known port number. \end_layout \begin_layout Code + * scopeId - For IPv6 sockets only. This is the index corresponding to the \end_layout \begin_layout Code + * network interface on which to set up the connection. This \end_layout \begin_layout Code + * parameter is ignored for IPv4 sockets or when an IPv6 "scoped \end_layout \begin_layout Code + * address" is specified in 'host' (i.e. where the colon-hex \end_layout \begin_layout Code + * network address is augmented with the scope ID). \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: \end_layout \begin_layout Code + * Returns the socket descriptor for the connection, or INVALID_DESC if all \end_layout \begin_layout Code + * address records have been processed and a connection could not be \end_layout \begin_layout Code + * established. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + static int openSckt( const char *host, \end_layout \begin_layout Code + const char *service, \end_layout \begin_layout Code + unsigned int scopeId ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct addrinfo *ai; \end_layout \begin_layout Code + int aiErr; \end_layout \begin_layout Code + struct addrinfo *aiHead; \end_layout \begin_layout Code + struct addrinfo hints; \end_layout \begin_layout Code + sockaddr_in6_t *pSadrIn6; \end_layout \begin_layout Code + int sckt; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Initialize the 'hints' structure for getaddrinfo(3). \end_layout \begin_layout Code + ** \end_layout \begin_layout Code + ** Notice that the 'ai_family' field is set to PF_UNSPEC, indicating to \end_layout \begin_layout Code + ** return both IPv4 and IPv6 address records for the host/service. Most of \end_layout \begin_layout Code + ** the time, the user isn't going to care whether an IPv4 connection or an \end_layout \begin_layout Code + ** IPv6 connection is established; the user simply wants to exchange data \end_layout \begin_layout Code + ** with the remote host and doesn't care how it's done. Sometimes, however, \end_layout \begin_layout Code + ** the user might want to explicitly specify the type of underlying socket. \end_layout \begin_layout Code + ** It is left as an exercise for the motivated reader to add a command line \end_layout \begin_layout Code + ** option allowing the user to specify the IP protocol, and then process the \end_layout \begin_layout Code + ** list of addresses accordingly (it's not that difficult). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + memset( &hints, 0, sizeof( hints ) ); \end_layout \begin_layout Code + hints.ai_family = PF_UNSPEC; /* IPv4 or IPv6 records (don't care). */ \end_layout \begin_layout Code + hints.ai_socktype = SOCK_STREAM; /* Connection-oriented byte stream. */ \end_layout \begin_layout Code + hints.ai_protocol = IPPROTO_TCP; /* TCP transport layer protocol only. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Look up the host/service information. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ( aiErr = getaddrinfo( host, \end_layout \begin_layout Code + service, \end_layout \begin_layout Code + &hints, \end_layout \begin_layout Code + &aiHead ) ) != 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - %s. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + gai_strerror( aiErr ) ); \end_layout \begin_layout Code + return INVALID_DESC; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Go through the list and try to open a connection. Continue until either \end_layout \begin_layout Code + ** a connection is established or the entire list is exhausted. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + for ( ai = aiHead, sckt = INVALID_DESC; \end_layout \begin_layout Code + ( ai != NULL ) && ( sckt == INVALID_DESC ); \end_layout \begin_layout Code + ai = ai->ai_next ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** IPv6 kluge. Make sure the scope ID is set. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ai->ai_family == PF_INET6 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr; \end_layout \begin_layout Code + if ( pSadrIn6->sin6_scope_id == 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + pSadrIn6->sin6_scope_id = scopeId; \end_layout \begin_layout Code + } /* End IF the scope ID wasn't set. */ \end_layout \begin_layout Code + } /* End IPv6 kluge. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the address info for the remote host. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Temporary character string buffers for host & service. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + char hostBfr[ NI_MAXHOST ]; \end_layout \begin_layout Code + char servBfr[ NI_MAXSERV ]; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the address information just fetched. Start with the \end_layout \begin_layout Code + ** common (protocol-independent) stuff first. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "Address info: \backslash n" \end_layout \begin_layout Code + " ai_flags = 0x%02X \backslash n" \end_layout \begin_layout Code + " ai_family = %d (PF_INET = %d, PF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " ai_socktype = %d (SOCK_STREAM = %d, SOCK_DGRAM = %d) \backslash @@ -22207,6 +24658,7 @@ n" \end_layout \begin_layout Code + " ai_protocol = %d (IPPROTO_TCP = %d, IPPROTO_UDP = %d) \backslash @@ -22214,608 +24666,751 @@ n" \end_layout \begin_layout Code + " ai_addrlen = %d (sockaddr_in = %d, " \end_layout \begin_layout Code + "sockaddr_in6 = %d) \backslash n", \end_layout \begin_layout Code + ai->ai_flags, \end_layout \begin_layout Code + ai->ai_family, \end_layout \begin_layout Code + PF_INET, \end_layout \begin_layout Code + PF_INET6, \end_layout \begin_layout Code + ai->ai_socktype, \end_layout \begin_layout Code + SOCK_STREAM, \end_layout \begin_layout Code + SOCK_DGRAM, \end_layout \begin_layout Code + ai->ai_protocol, \end_layout \begin_layout Code + IPPROTO_TCP, \end_layout \begin_layout Code + IPPROTO_UDP, \end_layout \begin_layout Code + ai->ai_addrlen, \end_layout \begin_layout Code + sizeof( struct sockaddr_in ), \end_layout \begin_layout Code + sizeof( struct sockaddr_in6 ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the protocol-specific formatted address. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + getnameinfo( ai->ai_addr, \end_layout \begin_layout Code + ai->ai_addrlen, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + sizeof( hostBfr ), \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + sizeof( servBfr ), \end_layout \begin_layout Code + NI_NUMERICHOST | NI_NUMERICSERV ); \end_layout \begin_layout Code + switch ( ai->ai_family ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case PF_INET: /* IPv4 address record. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + sockaddr_in_t *pSadrIn = (sockaddr_in_t*) ai->ai_addr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " ai_addr = sin_family: %d (AF_INET = %d, " \end_layout \begin_layout Code + "AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " sin_addr: %s \backslash n" \end_layout \begin_layout Code + " sin_port: %s \backslash n", \end_layout \begin_layout Code + pSadrIn->sin_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv4 record. */ \end_layout \begin_layout Code + case PF_INET6: /* IPv6 address record. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " ai_addr = sin6_family: %d (AF_INET = %d, " \end_layout \begin_layout Code + "AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " sin6_addr: %s \backslash n" \end_layout \begin_layout Code + " sin6_port: %s \backslash n" \end_layout \begin_layout Code + " sin6_flowinfo: %d \backslash n" \end_layout \begin_layout Code + " sin6_scope_id: %d \backslash n", \end_layout \begin_layout Code + pSadrIn6->sin6_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + pSadrIn6->sin6_flowinfo, \end_layout \begin_layout Code + pSadrIn6->sin6_scope_id ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv6 record. */ \end_layout \begin_layout Code + default: /* Can never get here, but just for completeness. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - Unknown protocol family (%d). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + ai->ai_family ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End DEFAULT case (unknown protocol family). */ \end_layout \begin_layout Code + } /* End SWITCH on protocol family. */ \end_layout \begin_layout Code + } /* End IF verbose mode. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Create a socket. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( !SYSCALL( "socket", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + sckt = socket( ai->ai_family, \end_layout \begin_layout Code + ai->ai_socktype, \end_layout \begin_layout Code + ai->ai_protocol ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + sckt = INVALID_DESC; \end_layout \begin_layout Code + continue; /* Try the next address record in the list. */ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Connect to the remote host. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( !SYSCALL( "connect", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + connect( sckt, \end_layout \begin_layout Code + ai->ai_addr, \end_layout \begin_layout Code + ai->ai_addrlen ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + (void) close( sckt ); /* Could use SYSCALL() again here, but why? */ \end_layout \begin_layout Code + sckt = INVALID_DESC; \end_layout \begin_layout Code + continue; /* Try the next address record in the list. */ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End FOR each address record returned by getaddrinfo(3). */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Clean up & return. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + freeaddrinfo( aiHead ); \end_layout \begin_layout Code + return sckt; \end_layout \begin_layout Code + } /* End openSckt() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: tod \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Receive the time-of-day from the remote server and write it to stdout. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * sckt - The socket descriptor for the connection. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: None. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + static void tod( int sckt ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + char bfr[ MAXBFRSIZE+1 ]; \end_layout \begin_layout Code + int inBytes; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** The client never sends anything, so shut down the write side of the \end_layout \begin_layout Code + ** connection. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( !SYSCALL( "shutdown", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + shutdown( sckt, SHUT_WR ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + return; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Read the time-of-day from the remote host. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + do \end_layout \begin_layout Code + { \end_layout \begin_layout Code + if ( !SYSCALL( "read", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + inBytes = read( sckt, \end_layout \begin_layout Code + bfr, \end_layout \begin_layout Code + MAXBFRSIZE ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + return; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + bfr[ inBytes ] = ' \backslash 0'; /* Null-terminate the received string. @@ -22823,19 +25418,23 @@ static void tod( int sckt ) \end_layout \begin_layout Code + fputs( bfr, stdout ); /* Null string if EOF (inBytes == 0). */ \end_layout \begin_layout Code + } while ( inBytes > 0 ); \end_layout \begin_layout Code + fflush( stdout ); \end_layout \begin_layout Code + } /* End tod() */ \end_layout @@ -22852,6 +25451,7 @@ The UDP client code is found in file tod6uc.c (time-of-day IPv6 UDP client). \end_layout \begin_layout Code + tod6uc [-v] [-s scope_id] [host [service]] \end_layout @@ -22892,216 +25492,265 @@ The UDP client source code contained in tod6uc.c follows: \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * File: tod6uc.c \end_layout \begin_layout Code + * Description: Contains source code for an IPv6-capable 'daytime' UDP client. \end_layout \begin_layout Code + * Author: John Wenker, Sr. Software Engineer \end_layout \begin_layout Code + * Performance Technologies, San Diego, USA \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** System header files. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #include /* errno declaration and error codes. */ \end_layout \begin_layout Code + #include /* if_nametoindex(3). */ \end_layout \begin_layout Code + #include /* getaddrinfo(3) and associated definitions. */ \end_layout \begin_layout Code + #include /* sockaddr_in and sockaddr_in6 definitions. */ \end_layout \begin_layout Code + #include /* printf(3) et al. */ \end_layout \begin_layout Code + #include /* exit(2). */ \end_layout \begin_layout Code + #include /* String manipulation and memory functions. */ \end_layout \begin_layout Code + #include /* Socket functions (socket(2), connect(2), etc). */ \end_layout \begin_layout Code + #include /* getopt(3), recvfrom(2), sendto(2), etc. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Constants & macros. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #define DFLT_HOST "localhost" /* Default server name. */ \end_layout \begin_layout Code + #define DFLT_SCOPE_ID "eth0" /* Default scope identifier. */ \end_layout \begin_layout Code + #define DFLT_SERVICE "daytime" /* Default service name. */ \end_layout \begin_layout Code + #define INVALID_DESC -1 /* Invalid file (socket) descriptor. */ \end_layout \begin_layout Code + #define MAXBFRSIZE 256 /* Max bfr sz to read remote TOD. */ \end_layout \begin_layout Code + #define VALIDOPTS "s:v" /* Valid command options. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Type definitions (for convenience). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + typedef enum { false = 0, true } boolean; \end_layout \begin_layout Code + typedef struct sockaddr_in sockaddr_in_t; \end_layout \begin_layout Code + typedef struct sockaddr_in6 sockaddr_in6_t; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Prototypes for internal helper functions. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static int openSckt( const char *host, \end_layout \begin_layout Code + const char *service, \end_layout \begin_layout Code + unsigned int scopeId ); \end_layout \begin_layout Code + static void tod( int sckt ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Global (within this file only) data objects. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static const char *pgmName; /* Program name (w/o directory). */ \end_layout \begin_layout Code + static boolean verbose = false; /* Verbose mode. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Usage macro. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + #define USAGE \backslash @@ -23109,6 +25758,7 @@ static boolean verbose = false; /* Verbose mode. \end_layout \begin_layout Code + { \backslash @@ -23116,6 +25766,7 @@ static boolean verbose = false; /* Verbose mode. \end_layout \begin_layout Code + fprintf( stderr, \backslash @@ -23123,6 +25774,7 @@ static boolean verbose = false; /* Verbose mode. \end_layout \begin_layout Code + "Usage: %s [-v] [-s scope_id] [host [service]] \backslash n", @@ -23131,6 +25783,7 @@ n", \end_layout \begin_layout Code + pgmName ); \backslash @@ -23138,6 +25791,7 @@ n", \end_layout \begin_layout Code + exit( 127 ); \backslash @@ -23145,20 +25799,24 @@ n", \end_layout \begin_layout Code + } /* End USAGE macro. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** This "macro" (even though it's really a function) is loosely based on the \end_layout \begin_layout Code + ** CHK() macro by Dr. V. Vinge (see server code). @@ -23166,1065 +25824,1316 @@ n", \end_layout \begin_layout Code + ** a boolean expression indicating the return code from one of the usual system \end_layout \begin_layout Code + ** calls that returns -1 on error. If a system call error occurred, an alert \end_layout \begin_layout Code + ** is written to stderr. It returns a boolean value indicating success/failure \end_layout \begin_layout Code + ** of the system call. \end_layout \begin_layout Code + ** \end_layout \begin_layout Code + ** Example: if ( !SYSCALL( "write", \end_layout \begin_layout Code + ** count = write( fd, bfr, size ) ) ) \end_layout \begin_layout Code + ** { \end_layout \begin_layout Code + ** // Error processing... but SYSCALL() will have already taken \end_layout \begin_layout Code + ** // care of dumping an error alert to stderr. \end_layout \begin_layout Code + ** } \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + static __inline boolean SYSCALL( const char *syscallName, \end_layout \begin_layout Code + int lineNbr, \end_layout \begin_layout Code + int status ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + if ( ( status == -1 ) && verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): System call failed ('%s') - %s. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + lineNbr, \end_layout \begin_layout Code + syscallName, \end_layout \begin_layout Code + strerror( errno ) ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + return status != -1; /* True if the system call was successful. */ \end_layout \begin_layout Code + } /* End SYSCALL() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: main \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Connect to a remote time-of-day service and write the remote host's TOD to \end_layout \begin_layout Code + * stdout. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * The usual argc & argv parameters to a main() program. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: \end_layout \begin_layout Code + * This function always returns zero. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + int main( int argc, \end_layout \begin_layout Code + char *argv[ ] ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + const char *host = DFLT_HOST; \end_layout \begin_layout Code + int opt; \end_layout \begin_layout Code + int sckt; \end_layout \begin_layout Code + unsigned int scopeId = if_nametoindex( DFLT_SCOPE_ID ); \end_layout \begin_layout Code + const char *service = DFLT_SERVICE; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Determine the program name (w/o directory prefix). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + pgmName = (const char*) strrchr( argv[ 0 ], '/' ); \end_layout \begin_layout Code + pgmName = pgmName == NULL ? argv[ 0 ] : pgmName+1; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Process command line options. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + opterr = 0; /* Turns off "invalid option" error messages. */ \end_layout \begin_layout Code + while ( ( opt = getopt( argc, argv, VALIDOPTS ) ) != -1 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + switch ( opt ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case 's': /* Scope identifier (IPv6 kluge). */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + scopeId = if_nametoindex( optarg ); \end_layout \begin_layout Code + if ( scopeId == 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s: Unknown network interface (%s). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + optarg ); \end_layout \begin_layout Code + USAGE; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + case 'v': /* Verbose mode. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + verbose = true; \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + default: \end_layout \begin_layout Code + { \end_layout \begin_layout Code + USAGE; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End SWITCH on command option. */ \end_layout \begin_layout Code + } /* End WHILE processing command options. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Process command arguments. At the end of the above loop, optind is the \end_layout \begin_layout Code + ** index of the first NON-option argv element. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + switch ( argc - optind ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case 2: /* Both host & service are specified on the command line. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + service = argv[ optind + 1 ]; \end_layout \begin_layout Code + /***** Fall through *****/ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + case 1: /* Host is specified on the command line. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + host = argv[ optind ]; \end_layout \begin_layout Code + /***** Fall through *****/ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + case 0: /* Use default host & service. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + default: \end_layout \begin_layout Code + { \end_layout \begin_layout Code + USAGE; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End SWITCH on number of command arguments. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Open a connection to the indicated host/service. \end_layout \begin_layout Code + ** \end_layout \begin_layout Code + ** Note that if all three of the following conditions are met, then the \end_layout \begin_layout Code + ** scope identifier remains unresolved at this point. \end_layout \begin_layout Code + ** 1) The default network interface is unknown for some reason. \end_layout \begin_layout Code + ** 2) The -s option was not used on the command line. \end_layout \begin_layout Code + ** 3) An IPv6 "scoped address" was not specified for the hostname on the \end_layout \begin_layout Code + ** command line. \end_layout \begin_layout Code + ** If the above three conditions are met, then only an IPv4 socket can be \end_layout \begin_layout Code + ** opened (connect(2) fails without the scope ID properly set for IPv6 \end_layout \begin_layout Code + ** sockets). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ( sckt = openSckt( host, \end_layout \begin_layout Code + service, \end_layout \begin_layout Code + scopeId ) ) == INVALID_DESC ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s: Sorry... a connectionless socket could " \end_layout \begin_layout Code + "not be set up. \backslash n", \end_layout \begin_layout Code + pgmName ); \end_layout \begin_layout Code + exit( 1 ); \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Get the remote time-of-day. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + tod( sckt ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Close the connection and terminate. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + (void) SYSCALL( "close", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + close( sckt ) ); \end_layout \begin_layout Code + return 0; \end_layout \begin_layout Code + } /* End main() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: openSckt \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Sets up a UDP socket to a remote server. Getaddrinfo(3) is used to \end_layout \begin_layout Code + * perform lookup functions and can return multiple address records (i.e. a \end_layout \begin_layout Code + * list of 'struct addrinfo' records). This function traverses the list and \end_layout \begin_layout Code + * tries to establish a connection to the remote server. The function ends \end_layout \begin_layout Code + * when either a connection has been established or all records in the list \end_layout \begin_layout Code + * have been processed. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * host - A pointer to a character string representing the hostname or IP \end_layout \begin_layout Code + * address (IPv4 or IPv6) of the remote server. \end_layout \begin_layout Code + * service - A pointer to a character string representing the service name or \end_layout \begin_layout Code + * well-known port number. \end_layout \begin_layout Code + * scopeId - For IPv6 sockets only. This is the index corresponding to the \end_layout \begin_layout Code + * network interface on which to exchange datagrams. This \end_layout \begin_layout Code + * parameter is ignored for IPv4 sockets or when an IPv6 "scoped \end_layout \begin_layout Code + * address" is specified in 'host' (i.e. where the colon-hex \end_layout \begin_layout Code + * network address is augmented with the scope ID). \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: \end_layout \begin_layout Code + * Returns the socket descriptor for the connection, or INVALID_DESC if all \end_layout \begin_layout Code + * address records have been processed and a socket could not be initialized. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + static int openSckt( const char *host, \end_layout \begin_layout Code + const char *service, \end_layout \begin_layout Code + unsigned int scopeId ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + struct addrinfo *ai; \end_layout \begin_layout Code + int aiErr; \end_layout \begin_layout Code + struct addrinfo *aiHead; \end_layout \begin_layout Code + struct addrinfo hints; \end_layout \begin_layout Code + sockaddr_in6_t *pSadrIn6; \end_layout \begin_layout Code + int sckt; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Initialize the 'hints' structure for getaddrinfo(3). \end_layout \begin_layout Code + ** \end_layout \begin_layout Code + ** Notice that the 'ai_family' field is set to PF_UNSPEC, indicating to \end_layout \begin_layout Code + ** return both IPv4 and IPv6 address records for the host/service. Most of \end_layout \begin_layout Code + ** the time, the user isn't going to care whether an IPv4 connection or an \end_layout \begin_layout Code + ** IPv6 connection is established; the user simply wants to exchange data \end_layout \begin_layout Code + ** with the remote host and doesn't care how it's done. Sometimes, however, \end_layout \begin_layout Code + ** the user might want to explicitly specify the type of underlying socket. \end_layout \begin_layout Code + ** It is left as an exercise for the motivated reader to add a command line \end_layout \begin_layout Code + ** option allowing the user to specify the IP protocol, and then process the \end_layout \begin_layout Code + ** list of addresses accordingly (it's not that difficult). \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + memset( &hints, 0, sizeof( hints ) ); \end_layout \begin_layout Code + hints.ai_family = PF_UNSPEC; /* IPv4 or IPv6 records (don't care). */ \end_layout \begin_layout Code + hints.ai_socktype = SOCK_DGRAM; /* Connectionless communication. */ \end_layout \begin_layout Code + hints.ai_protocol = IPPROTO_UDP; /* UDP transport layer protocol only. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Look up the host/service information. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ( aiErr = getaddrinfo( host, \end_layout \begin_layout Code + service, \end_layout \begin_layout Code + &hints, \end_layout \begin_layout Code + &aiHead ) ) != 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - %s. \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + gai_strerror( aiErr ) ); \end_layout \begin_layout Code + return INVALID_DESC; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Go through the list and try to open a connection. Continue until either \end_layout \begin_layout Code + ** a connection is established or the entire list is exhausted. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + for ( ai = aiHead, sckt = INVALID_DESC; \end_layout \begin_layout Code + ( ai != NULL ) && ( sckt == INVALID_DESC ); \end_layout \begin_layout Code + ai = ai->ai_next ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** IPv6 kluge. Make sure the scope ID is set. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( ai->ai_family == PF_INET6 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr; \end_layout \begin_layout Code + if ( pSadrIn6->sin6_scope_id == 0 ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + pSadrIn6->sin6_scope_id = scopeId; \end_layout \begin_layout Code + } /* End IF the scope ID wasn't set. */ \end_layout \begin_layout Code + } /* End IPv6 kluge. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the address info for the remote host. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( verbose ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Temporary character string buffers for host & service. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + char hostBfr[ NI_MAXHOST ]; \end_layout \begin_layout Code + char servBfr[ NI_MAXSERV ]; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the address information just fetched. Start with the \end_layout \begin_layout Code + ** common (protocol-independent) stuff first. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "Address info: \backslash n" \end_layout \begin_layout Code + " ai_flags = 0x%02X \backslash n" \end_layout \begin_layout Code + " ai_family = %d (PF_INET = %d, PF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " ai_socktype = %d (SOCK_STREAM = %d, SOCK_DGRAM = %d) \backslash @@ -24232,6 +27141,7 @@ n" \end_layout \begin_layout Code + " ai_protocol = %d (IPPROTO_TCP = %d, IPPROTO_UDP = %d) \backslash @@ -24239,606 +27149,748 @@ n" \end_layout \begin_layout Code + " ai_addrlen = %d (sockaddr_in = %d, " \end_layout \begin_layout Code + "sockaddr_in6 = %d) \backslash n", \end_layout \begin_layout Code + ai->ai_flags, \end_layout \begin_layout Code + ai->ai_family, \end_layout \begin_layout Code + PF_INET, \end_layout \begin_layout Code + PF_INET6, \end_layout \begin_layout Code + ai->ai_socktype, \end_layout \begin_layout Code + SOCK_STREAM, \end_layout \begin_layout Code + SOCK_DGRAM, \end_layout \begin_layout Code + ai->ai_protocol, \end_layout \begin_layout Code + IPPROTO_TCP, \end_layout \begin_layout Code + IPPROTO_UDP, \end_layout \begin_layout Code + ai->ai_addrlen, \end_layout \begin_layout Code + sizeof( struct sockaddr_in ), \end_layout \begin_layout Code + sizeof( struct sockaddr_in6 ) ); \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Display the protocol-specific formatted address. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + getnameinfo( ai->ai_addr, \end_layout \begin_layout Code + ai->ai_addrlen, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + sizeof( hostBfr ), \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + sizeof( servBfr ), \end_layout \begin_layout Code + NI_NUMERICHOST | NI_NUMERICSERV ); \end_layout \begin_layout Code + switch ( ai->ai_family ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + case PF_INET: /* IPv4 address record. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + sockaddr_in_t *pSadrIn = (sockaddr_in_t*) ai->ai_addr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " ai_addr = sin_family: %d (AF_INET = %d, " \end_layout \begin_layout Code + "AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " sin_addr: %s \backslash n" \end_layout \begin_layout Code + " sin_port: %s \backslash n", \end_layout \begin_layout Code + pSadrIn->sin_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv4 record. */ \end_layout \begin_layout Code + case PF_INET6: /* IPv6 address record. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + pSadrIn6 = (sockaddr_in6_t*) ai->ai_addr; \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + " ai_addr = sin6_family: %d (AF_INET = %d, " \end_layout \begin_layout Code + "AF_INET6 = %d) \backslash n" \end_layout \begin_layout Code + " sin6_addr: %s \backslash n" \end_layout \begin_layout Code + " sin6_port: %s \backslash n" \end_layout \begin_layout Code + " sin6_flowinfo: %d \backslash n" \end_layout \begin_layout Code + " sin6_scope_id: %d \backslash n", \end_layout \begin_layout Code + pSadrIn6->sin6_family, \end_layout \begin_layout Code + AF_INET, \end_layout \begin_layout Code + AF_INET6, \end_layout \begin_layout Code + hostBfr, \end_layout \begin_layout Code + servBfr, \end_layout \begin_layout Code + pSadrIn6->sin6_flowinfo, \end_layout \begin_layout Code + pSadrIn6->sin6_scope_id ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End CASE of IPv6 record. */ \end_layout \begin_layout Code + default: /* Can never get here, but just for completeness. */ \end_layout \begin_layout Code + { \end_layout \begin_layout Code + fprintf( stderr, \end_layout \begin_layout Code + "%s (line %d): ERROR - Unknown protocol family (%d). \backslash n", \end_layout \begin_layout Code + pgmName, \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + ai->ai_family ); \end_layout \begin_layout Code + break; \end_layout \begin_layout Code + } /* End DEFAULT case (unknown protocol family). */ \end_layout \begin_layout Code + } /* End SWITCH on protocol family. */ \end_layout \begin_layout Code + } /* End IF verbose mode. */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Create a socket. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( !SYSCALL( "socket", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + sckt = socket( ai->ai_family, \end_layout \begin_layout Code + ai->ai_socktype, \end_layout \begin_layout Code + ai->ai_protocol ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + sckt = INVALID_DESC; \end_layout \begin_layout Code + continue; /* Try the next address record in the list. */ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Set the target destination for the remote host on this socket. That \end_layout \begin_layout Code + ** is, this socket only communicates with the specified host. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( !SYSCALL( "connect", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + connect( sckt, \end_layout \begin_layout Code + ai->ai_addr, \end_layout \begin_layout Code + ai->ai_addrlen ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + (void) close( sckt ); /* Could use SYSCALL() again here, but why? */ \end_layout \begin_layout Code + sckt = INVALID_DESC; \end_layout \begin_layout Code + continue; /* Try the next address record in the list. */ \end_layout \begin_layout Code + } \end_layout \begin_layout Code + } /* End FOR each address record returned by getaddrinfo(3). */ \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Clean up & return. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + freeaddrinfo( aiHead ); \end_layout \begin_layout Code + return sckt; \end_layout \begin_layout Code + } /* End openSckt() */ \end_layout \begin_layout Code + /****************************************************************************** \end_layout \begin_layout Code + * Function: tod \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Description: \end_layout \begin_layout Code + * Receive the time-of-day from the remote server and write it to stdout. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Parameters: \end_layout \begin_layout Code + * sckt - The socket descriptor for the connection. \end_layout \begin_layout Code + * \end_layout \begin_layout Code + * Return Value: None. \end_layout \begin_layout Code + ******************************************************************************/ \end_layout \begin_layout Code + static void tod( int sckt ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + char bfr[ MAXBFRSIZE+1 ]; \end_layout \begin_layout Code + int inBytes; \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Send a datagram to the server to wake it up. The content isn't \end_layout \begin_layout Code + ** important, but something must be sent to let it know we want the TOD. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( !SYSCALL( "write", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + write( sckt, "Are you there?", 14 ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + return; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + /* \end_layout \begin_layout Code + ** Read the time-of-day from the remote host. \end_layout \begin_layout Code + */ \end_layout \begin_layout Code + if ( !SYSCALL( "read", \end_layout \begin_layout Code + __LINE__, \end_layout \begin_layout Code + inBytes = read( sckt, \end_layout \begin_layout Code + bfr, \end_layout \begin_layout Code + MAXBFRSIZE ) ) ) \end_layout \begin_layout Code + { \end_layout \begin_layout Code + return; \end_layout \begin_layout Code + } \end_layout \begin_layout Code + bfr[ inBytes ] = ' \backslash 0'; /* Null-terminate the received string. @@ -24846,15 +27898,18 @@ static void tod( int sckt ) \end_layout \begin_layout Code + fputs( bfr, stdout ); /* Null string if EOF (inBytes == 0). */ \end_layout \begin_layout Code + fflush( stdout ); \end_layout \begin_layout Code + } /* End tod() */ \end_layout diff --git a/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.pdf b/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.pdf index 511ae16f3fcde0ba4463c541bfdaf67224be1601..3f61c903841c13787b7278c9501e0d81abb9822f 100644 GIT binary patch delta 22283 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 delta 22295 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 a4w^Y=H4RKJgQR#=HPw0K<<0Fac>W9fKg^E+ diff --git a/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.sgml b/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.sgml index 1bed3dca..3548b37b 100644 --- a/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.sgml +++ b/LDP/users/Peter-Bieringer/Linux+IPv6-HOWTO.sgml @@ -2010,7 +2010,12 @@ Chain intOUT (1 references)
Allow some important IPv6 ICMP traffic, without counter, but checking hop-limit for security -Allow incoming SSH for IPv4 and IPv6, using therefore the IP version aware table “inet”
@@ -2029,8 +2034,10 @@ table ip6 filter { chain input { type filter hook input priority 1; icmpv6 type echo-request counter packets 0 bytes 0 accept - ip6 hoplimit 1 icmpv6 type { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept - ip6 hoplimit 255 icmpv6 type { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept + ip6 hoplimit 1 icmpv6 type +¬ { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept + ip6 hoplimit 255 icmpv6 type +¬ { nd-neighbor-advert, nd-neighbor-solicit, nd-router-advert} accept } } ]]>Table for IP version aware filter diff --git a/LDP/users/Peter-Bieringer/lyxcodelinewrapper.pl b/LDP/users/Peter-Bieringer/lyxcodelinewrapper.pl index f7bf4c36..ac3481ae 100755 --- a/LDP/users/Peter-Bieringer/lyxcodelinewrapper.pl +++ b/LDP/users/Peter-Bieringer/lyxcodelinewrapper.pl @@ -26,7 +26,7 @@ # Known limitations: # * Code lines containing LyX tags are currently not supported and skipped -my $lyx_format_supported = "345"; +my $lyx_format_supported = "474"; sub print_long_line ($);