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 ;
 |