0 | module System.UV.Data.DNS
 1 |
 2 | import Derive.Prelude
 3 |
 4 | %language ElabReflection
 5 | %default total
 6 |
 7 | ||| Socket Families
 8 | |||
 9 | ||| The ones that people might actually use. We're not going to need US
10 | ||| Government proprietary ones.
11 | public export
12 | data SockFamily : Type where
13 |   ||| Unspecified
14 |   AF_UNSPEC : SockFamily
15 |
16 |   ||| Unix type sockets
17 |   AF_UNIX : SockFamily
18 |
19 |   ||| IP / UDP etc. IPv4
20 |   AF_INET : SockFamily
21 |
22 |   |||  IP / UDP etc. IPv6
23 |   AF_INET6 : SockFamily
24 |
25 | %runElab derive "SockFamily" [Show,Eq]
26 |
27 | ||| Socket Types.
28 | public export
29 | data SockType : Type where
30 |   ||| Any socket type
31 |   Any : SockType
32 |
33 |   ||| TCP
34 |   Stream : SockType
35 |
36 |   ||| UDP
37 |   Datagram : SockType
38 |
39 |   ||| Raw sockets
40 |   Raw : SockType
41 |
42 | %runElab derive "SockType" [Show,Eq]
43 |
44 | public export
45 | data Protocol : Type where
46 |   IPPROTO_IP   : Protocol
47 |   IPPROTO_IPV6 : Protocol
48 |   IPPROTO_ICMP : Protocol
49 |   IPPROTO_RAW  : Protocol
50 |   IPPROTO_TCP  : Protocol
51 |   IPPROTO_UDP  : Protocol
52 |
53 | %runElab derive "Protocol" [Show,Eq]
54 |
55 | public export
56 | familyCode : SockFamily -> Bits32
57 | familyCode AF_INET   = 2
58 | familyCode AF_INET6  = 10
59 | familyCode AF_UNIX   = 1
60 | familyCode AF_UNSPEC = 0
61 |
62 | public export
63 | sockCode : SockType -> Bits32
64 | sockCode Stream = 1
65 | sockCode Datagram = 2
66 | sockCode Raw = 3
67 | sockCode Any = 0
68 |
69 | public export
70 | protocolCode : Protocol -> Bits32
71 | protocolCode IPPROTO_IP   = 0
72 | protocolCode IPPROTO_IPV6 = 41
73 | protocolCode IPPROTO_ICMP = 1
74 | protocolCode IPPROTO_RAW  = 255
75 | protocolCode IPPROTO_TCP  = 6
76 | protocolCode IPPROTO_UDP  = 17
77 |