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 io.sockets.impl
 | 
						|
       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 ;
 |