56 lines
2.0 KiB
Factor
56 lines
2.0 KiB
Factor
|
|
USING: alien.syntax ;
|
|
|
|
IN: unix.linux.route
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
C-STRUCT: struct-rtentry
|
|
{ "ulong" "rt_pad1" }
|
|
{ "struct-sockaddr" "rt_dst" }
|
|
{ "struct-sockaddr" "rt_gateway" }
|
|
{ "struct-sockaddr" "rt_genmask" }
|
|
{ "ushort" "rt_flags" }
|
|
{ "short" "rt_pad2" }
|
|
{ "ulong" "rt_pad3" }
|
|
{ "uchar" "rt_tos" }
|
|
{ "uchar" "rt_class" }
|
|
{ "short" "rt_pad4" }
|
|
{ "short" "rt_metric" }
|
|
{ "char*" "rt_dev" }
|
|
{ "ulong" "rt_mtu" }
|
|
{ "ulong" "rt_window" }
|
|
{ "ushort" "rt_irtt" } ;
|
|
|
|
: RTF_UP HEX: 0001 ; ! Route usable.
|
|
: RTF_GATEWAY HEX: 0002 ; ! Destination is a gateway.
|
|
|
|
: RTF_HOST HEX: 0004 ; ! Host entry (net otherwise).
|
|
: RTF_REINSTATE HEX: 0008 ; ! Reinstate route after timeout.
|
|
: RTF_DYNAMIC HEX: 0010 ; ! Created dyn. (by redirect).
|
|
: RTF_MODIFIED HEX: 0020 ; ! Modified dyn. (by redirect).
|
|
: RTF_MTU HEX: 0040 ; ! Specific MTU for this route.
|
|
: RTF_MSS RTF_MTU ; ! Compatibility.
|
|
: RTF_WINDOW HEX: 0080 ; ! Per route window clamping.
|
|
: RTF_IRTT HEX: 0100 ; ! Initial round trip time.
|
|
: RTF_REJECT HEX: 0200 ; ! Reject route.
|
|
: RTF_STATIC HEX: 0400 ; ! Manually injected route.
|
|
: RTF_XRESOLVE HEX: 0800 ; ! External resolver.
|
|
: RTF_NOFORWARD HEX: 1000 ; ! Forwarding inhibited.
|
|
: RTF_THROW HEX: 2000 ; ! Go to next class.
|
|
: RTF_NOPMTUDISC HEX: 4000 ; ! Do not send packets with DF.
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
USING: kernel alien.c-types io.sockets
|
|
unix unix.linux.sockios ;
|
|
|
|
: route ( dst gateway genmask flags -- )
|
|
>r >r >r >r
|
|
"struct-rtentry" <c-object>
|
|
r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_dst
|
|
r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_gateway
|
|
r> 0 <inet4> make-sockaddr over set-struct-rtentry-rt_genmask
|
|
r> over set-struct-rtentry-rt_flags
|
|
AF_INET SOCK_DGRAM 0 socket SIOCADDRT rot ioctl drop ;
|