98 lines
2.9 KiB
Factor
98 lines
2.9 KiB
Factor
|
|
USING: alien.syntax ;
|
|
|
|
IN: unix.linux.if
|
|
|
|
: IFNAMSIZ 16 ;
|
|
: IF_NAMESIZE 16 ;
|
|
: IFHWADDRLEN 6 ;
|
|
|
|
! Standard interface flags (netdevice->flags)
|
|
|
|
: IFF_UP HEX: 1 ; ! interface is up
|
|
: IFF_BROADCAST HEX: 2 ; ! broadcast address valid
|
|
: IFF_DEBUG HEX: 4 ; ! turn on debugging
|
|
: IFF_LOOPBACK HEX: 8 ; ! is a loopback net
|
|
: IFF_POINTOPOINT HEX: 10 ; ! interface is has p-p link
|
|
: IFF_NOTRAILERS HEX: 20 ; ! avoid use of trailers
|
|
: IFF_RUNNING HEX: 40 ; ! interface running and carrier ok
|
|
: IFF_NOARP HEX: 80 ; ! no ARP protocol
|
|
: IFF_PROMISC HEX: 100 ; ! receive all packets
|
|
: IFF_ALLMULTI HEX: 200 ; ! receive all multicast packets
|
|
|
|
: IFF_MASTER HEX: 400 ; ! master of a load balancer
|
|
: IFF_SLAVE HEX: 800 ; ! slave of a load balancer
|
|
|
|
: IFF_MULTICAST HEX: 1000 ; ! Supports multicast
|
|
|
|
! #define IFF_VOLATILE
|
|
! (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST|IFF_MASTER|IFF_SLAVE|IFF_RUNNING)
|
|
|
|
: IFF_PORTSEL HEX: 2000 ; ! can set media type
|
|
: IFF_AUTOMEDIA HEX: 4000 ; ! auto media select active
|
|
: IFF_DYNAMIC HEX: 8000 ; ! dialup device with changing addresses
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
C-STRUCT: struct-ifmap
|
|
{ "ulong" "mem-start" }
|
|
{ "ulong" "mem-end" }
|
|
{ "ushort" "base-addr" }
|
|
{ "uchar" "irq" }
|
|
{ "uchar" "dma" }
|
|
{ "uchar" "port" } ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
! Hmm... the generic sockaddr type isn't defined anywhere.
|
|
! Put it here for now.
|
|
|
|
TYPEDEF: ushort sa_family_t
|
|
|
|
C-STRUCT: struct-sockaddr
|
|
{ "sa_family_t" "sa_family" }
|
|
{ { "char" 14 } "sa_data" } ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
! C-UNION: union-ifr-ifrn { "char" IFNAMSIZ } ;
|
|
|
|
C-UNION: union-ifr-ifrn { "char" 16 } ;
|
|
|
|
C-UNION: union-ifr-ifru
|
|
"struct-sockaddr"
|
|
! "sockaddr"
|
|
"short"
|
|
"int"
|
|
"struct-ifmap"
|
|
! { "char" IFNAMSIZ }
|
|
{ "char" 16 }
|
|
"caddr_t" ;
|
|
|
|
C-STRUCT: struct-ifreq
|
|
{ "union-ifr-ifrn" "ifr-ifrn" }
|
|
{ "union-ifr-ifru" "ifr-ifru" } ;
|
|
|
|
: ifr-name ( struct-ifreq -- value ) struct-ifreq-ifr-ifrn ;
|
|
|
|
: ifr-hwaddr ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
|
|
: ifr-addr ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
|
|
: ifr-dstaddr ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
|
|
: ifr-broadaddr ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
|
|
: ifr-netmask ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
|
|
: ifr-flags ( struct-ifreq -- value ) struct-ifreq-ifr-ifru ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
|
|
C-UNION: union-ifc-ifcu "caddr_t" "struct-ifreq*" ;
|
|
|
|
C-STRUCT: struct-ifconf
|
|
{ "int" "ifc-len" }
|
|
{ "union-ifc-ifcu" "ifc-ifcu" } ;
|
|
|
|
: ifc-len ( struct-ifconf -- value ) struct-ifconf-ifc-len ;
|
|
|
|
: ifc-buf ( struct-ifconf -- value ) struct-ifconf-ifc-ifcu ;
|
|
: ifc-req ( struct-ifconf -- value ) struct-ifconf-ifc-ifcu ;
|
|
|
|
! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |