/dev/net/ip/top
		
		
		
		
		
		Jump to navigation
		Jump to search
		
		
	
Socket Ioctls
Fill me in!
| Request Number | Name | Input | Output | Notes | 
|---|---|---|---|---|
| 0x1 | SOAccept | (int socket, struct ptr?) | secret | |
| 0x2 | SOBind | (int socket, struct sockaddr_in *address) | 0 | |
| 0x3 | SOClose | 4 bytes? | ||
| 0x4 | SOConnect | (int socket, struct sockaddr_in *address) | 0 | |
| 0x5 | SOFcntl | |||
| 0x6 | SOGetPeerName | |||
| 0x7 | SOGetSockName | |||
| 0x8 | SOGetSockOpt | 0 | 0x18 bytes | |
| 0x9 | SOSetSockOpt | 0x24 bytes? | 0 | |
| 0xA | SOListen | (s32 socket, s32 backlog) | secret | |
| 0xB | SOPoll | |||
| 0xC | SORecvFrom | (int socket, char * message, int msg_len, int flags) | ||
| 0xD | SOSendTo | (int socket, char * message, int msg_len, int flags) | ||
| 0xE | SOShutdown | 8 bytes? | ||
| 0xF | SOSocket | 0xC bytes (int domain, int type, int protocol) | 0 | |
| 0x10 | SOGetHostId | none | none | returns 32-bit numeric IP | 
| 0x11 | SOGetHostByName | (char *hostname) | hostent | |
| 0x12 | SOGetHostByAddr | |||
| 0x13 | SOGetNameInfo | (vector) ? | ||
| 0x15 | SOInetAtoN | IPv4 address (string) | IPv4 address (4 bytes) | inet_aton() | 
| 0x16 | SOInetPtoN | |||
| 0x17 | SOInetNtoP | secret | ||
| 0x18 | SOGetAddrInfo | (vector) ? | ||
| 0x19 | SOSockAtMark | secret | ||
| 0x1B | SOCleanup | |||
| 0x1C | SOGetInterfaceOpt | (vector 1 in 2 out) 8 bytes (u32 level, u32 optname) | optval, sizeof(optval) | see below for options | 
| 0x1D | SOSetInterfaceOpt | (vector) ? | ||
| 0x1E | SOSetInterface | secret | ||
| 0x1F | SOStartup | 0 | 0 | |
| 0x30 | ICMPSocket | int domain | returns new socket | |
| 0x31 | ICMPEcho | (vector 2 in 0 out) struct {int socket, u32 has_addr, u64 timeout, struct sockaddr_in addr}, u8 echodata[] | echodata is optional/size limited by MTU | |
| 0x32 | ICMPCancel | int socket | Cancels an outstanding echo request | |
| 0x33 | ICMPClose | int socket | 
GetInterfaceOpt
SOGetInterfaceOpt works like SOGetSockOpt, except level is always 0xFFFE. The following is a list of possible values for optname and the appropriate matching optval sizes:
| Value | Size | Description | Typical Hex Value (for IOS58) | 
|---|---|---|---|
| 0x1001 | 4 | internal function pointer | 13B59089 | 
| 0x1002 | 4 | internal function pointer | 13B59089 | 
| 0x1003 | 4 | 00000000 | |
| 0x1004 | 6 | active interface MAC address | 000DC38A 3410 | 
| 0x1005 | 4 | 00000001 | |
| 0x1006 | 56 | global packet/byte counters? | 00000000 00019B96 00000055 00000003 00000000 00000000 00000000 00000058 00000000 0000180B 00000007 00.. | 
| 0x1007 | 4 | 00000000 | |
| 0x2001 | 4 | 0000000A | |
| 0x2002 | 4 | 00000002 | |
| 0x2003 | 4 | 00000005 | |
| 0x2004 | 4 | 00000003 | |
| 0x2005 | 256 bytes max | zeroes | |
| 0x3001 | 4 | hardcoded value | 00000010 | 
| 0x3002 | multiple of 16 | arp cache | struct {u32 ?, u32 ip, u8 mac[6], u8 pad[2]}[] | 
| 0x4001 | 64 | 00000057 00000000 00000000 00000000 00000000 00000057 0000005A 00000000 00.. | |
| 0x4002 | 4 | hardcoded value | 00000002 | 
| 0x4003 | any | ip settings | If size >= 12 bytes, returns {u32 ip, u32 netmask, u32 subnet_broadcast} followed by { u32 x0; u32 x4; u16 x8; u16 xa; } if size >= 24 bytes [check] Writes 0, 12 or 24 to the size parameter depending on the amount of information returned. | 
| 0x4004 | 4 | MTU? | 000005DC | 
| 0x4005 | 4 | routing table size | most IOS' are hardcoded to return 0x20 | 
| 0x4006 | multiple of 24 | routing table | struct {u32 dest_ip, u32 netmask, u32 gw, u32 flags, u64 tick?}[] | 
| 0x4009 | 4 | 00000000 | |
| 0x5001 | 104 | ICMP stats? | zeroes | 
| 0x6001 | 72 | IPV6 stats? | zeroes | 
| 0x6002 | 4 | 00000000 | |
| 0x6003 | 4 | harcoded value | 00000080 | 
| 0x6004 | |||
| 0x6009 | 4 | ||
| 0x600A | 4 | hardcoded value | 00000080 | 
| 0x600B | |||
| 0x600C | 4 | hardcoded value | 00000080 | 
| 0x600D | |||
| 0x600E | 00000080 | ||
| 0x600F | |||
| 0x6010 | 00000080 | ||
| 0x6011 | |||
| 0x7001 | 136 | zeroes | |
| 0x8001 | 16 | 00000005 00000000 00000002 00000000 | |
| 0x8002 | 4 | active UDP sockets? | 00000003 | 
| 0x8003 | multiple of 16 | open UDP sockets? | struct {u8 localsize (8), u8 localfamily (2), u16 localport, u32 localip, u8 remotesize(8), u8 remotefamily(2), u16 remoteport, u32 remoteip}[] | 
| 0x8004 | 4 | 00000000 | |
| 0x8005 | |||
| 0x9001 | 40 | 00000002 00000001 00000000 00000002 00000000 00000050 00000007 00000000 00000000 00000003 | |
| 0x9002 | 4 | active TCP sockets? | 00000001 | 
| 0x9003 | multiple of 20 | TCP sockets | struct {u32 state, u8 localsize (8), u8 localfamily (2), u16 localport, u32 localip, u8 remotesize(8), u8 remotefamily(2), u16 remoteport, u32 remoteip}[] | 
| 0x9004 | 4 | 00000000 | |
| 0x9005 | |||
| 0x9006 | 4 | 00000078 | |
| 0x9007 | 4 | 000001F4 | |
| 0x9008 | 4 | 000000F0 | |
| 0x9009 | 4 | 00000003 | |
| 0xA001 | 4 | IGMP version | 00000002 | 
| 0xB001 | 256 bytes max | zeroes | |
| 0xB002 | 4 | hardcoded value | 00000002 | 
| 0xB003 | multiple of 4 | DNS Servers | u32 dns_ips[] | 
| 0xC001 | 4 | DHCP lease time remaining? | 000029EF |