package mirage
The MirageOS library operating system
Install
dune-project
Dependency
Authors
Maintainers
Sources
mirage-4.10.1.tbz
sha256=1155b5e9a585d3b44dfdd72777d94a7222b0f88a1737593bfb1f09954b6fb914
sha512=c59a0051f1037d7dd5bb81dfc8a265117b533383d0b285e0c2101b44d2ca8bcab40c432ce696a5b44397216e78ac59863f1ab6c5fb33bb338ca18d7ef359500f
doc/src/mirage.devices/ip.ml.html
Source file ip.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
open Functoria.DSL open Arp open Ethernet open Misc open Network open Qubesdb type v4 type v6 type v4v6 type 'a ip = IP type ipv4 = v4 ip type ipv6 = v6 ip type ipv4v6 = v4v6 ip let ip = Functoria.Type.Type IP let ipv4 : ipv4 typ = ip let ipv6 : ipv6 typ = ip let ipv4v6 : ipv4v6 typ = ip (* convenience function for linking tcpip.unix for checksums *) let right_tcpip_library ?libs ~sublibs pkg = let min = "9.0.0" and max = "10.0.0" in Key.pure [ package ~min ~max ?libs ~sublibs pkg ] let ipv4_keyed_conf ~ip ~gateway ~no_init () = let packages_v = right_tcpip_library ~sublibs:[ "ipv4" ] "tcpip" in let runtime_args = Runtime_arg.[ v ip; v gateway; v no_init ] in let connect _ modname = function | [ etif; arp; ip; gateway; no_init ] -> code ~pos:__POS__ "%s.connect@[~no_init:%s@ ~cidr:%s@ ?gateway:%s@ %s@ %s@]" modname no_init ip gateway etif arp | _ -> connect_err "ipv4 keyed" 5 in impl ~packages_v ~runtime_args ~connect "Static_ipv4.Make" (ethernet @-> arpv4 @-> ipv4) let ipv4_dhcp_conf = let packages = [ package ~min:"2.0.0" ~max:"3.0.0" ~sublibs:[ "mirage" ] "charrua-client" ] in let connect _ modname = function | [ network; ethernet; arp ] -> code ~pos:__POS__ "%s.connect@[@ %s@ %s@ %s@]" modname network ethernet arp | _ -> connect_err "ipv4 dhcp" 3 in impl ~packages ~connect "Dhcp_ipv4.Make" (network @-> ethernet @-> arpv4 @-> ipv4) let ipv4_of_dhcp net ethif arp = ipv4_dhcp_conf $ net $ ethif $ arp let keyed_create_ipv4 ?group ~no_init etif arp = let network, gateway = (Ipaddr.V4.Prefix.of_string_exn "10.0.0.2/24", None) in let ip = Runtime_arg.V4.network ?group network and gateway = Runtime_arg.V4.gateway ?group gateway in ipv4_keyed_conf ~ip ~gateway ~no_init () $ etif $ arp let create_ipv4 ?group etif arp = let network, gateway = (Ipaddr.V4.Prefix.of_string_exn "10.0.0.2/24", None) in let ip = Runtime_arg.V4.network ?group network and gateway = Runtime_arg.V4.gateway ?group gateway and no_init = Runtime_arg.ipv6_only ?group () in ipv4_keyed_conf ~ip ~gateway ~no_init () $ etif $ arp let ipv4_qubes_conf = let packages = [ package ~min:"2.0.0" ~max:"3.0.0" "mirage-qubes-ipv4" ] in let connect _ modname = function | [ db; etif; arp ] -> code ~pos:__POS__ "%s.connect@[@ %s@ %s@ %s@]" modname db etif arp | _ -> connect_err "qubes_ipv4" 3 in impl ~packages ~connect "Qubesdb_ipv4.Make" (qubesdb @-> ethernet @-> arpv4 @-> ipv4) let ipv4_qubes db ethernet arp = ipv4_qubes_conf $ db $ ethernet $ arp let ipv6_conf ~ip ~gateway ~handle_ra ~no_init () = let packages_v = right_tcpip_library ~sublibs:[ "ipv6" ] "tcpip" in let runtime_args = Runtime_arg.[ v ip; v gateway; v handle_ra; v no_init ] in let connect _ modname = function | [ netif; etif; ip; gateway; handle_ra; no_init ] -> code ~pos:__POS__ "%s.connect@[~no_init:%s@ ~handle_ra:%s@ ?cidr:%s@ ?gateway:%s@ %s@ \ %s@]" modname no_init handle_ra ip gateway netif etif | _ -> connect_err "ipv6" 6 in impl ~packages_v ~runtime_args ~connect "Ipv6.Make" (network @-> ethernet @-> ipv6) let keyed_create_ipv6 ?group ~no_init netif etif = let network, gateway = (None, None) in let ip = Runtime_arg.V6.network ?group network and gateway = Runtime_arg.V6.gateway ?group gateway and handle_ra = Runtime_arg.V6.accept_router_advertisements ?group () in ipv6_conf ~ip ~gateway ~handle_ra ~no_init () $ netif $ etif let create_ipv6 ?group netif etif = let network, gateway = (None, None) in let ip = Runtime_arg.V6.network ?group network and gateway = Runtime_arg.V6.gateway ?group gateway and handle_ra = Runtime_arg.V6.accept_router_advertisements ?group () and no_init = Runtime_arg.ipv4_only ?group () in ipv6_conf ~ip ~gateway ~handle_ra ~no_init () $ netif $ etif let ipv4v6_conf ~ipv4_only ~ipv6_only () = let packages_v = right_tcpip_library ~sublibs:[ "stack-direct" ] "tcpip" in let runtime_args = [ Runtime_arg.v ipv4_only; Runtime_arg.v ipv6_only ] in let connect _ modname = function | [ ipv4; ipv6; ipv4_only; ipv6_only ] -> code ~pos:__POS__ "%s.connect@[@ ~ipv4_only:%s@ ~ipv6_only:%s@ %s@ %s@]" modname ipv4_only ipv6_only ipv4 ipv6 | _ -> connect_err "ipv4v6" 4 in impl ~packages_v ~runtime_args ~connect "Tcpip_stack_direct.IPV4V6" (ipv4 @-> ipv6 @-> ipv4v6) let keyed_ipv4v6 ~ipv4_only ~ipv6_only ipv4 ipv6 = ipv4v6_conf ~ipv4_only ~ipv6_only () $ ipv4 $ ipv6 let create_ipv4v6 ?group ipv4 ipv6 = let ipv4_only = Runtime_arg.ipv4_only ?group () and ipv6_only = Runtime_arg.ipv6_only ?group () in keyed_ipv4v6 ~ipv4_only ~ipv6_only ipv4 ipv6
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>