package mirage
The MirageOS library operating system
Install
Dune Dependency
Authors
Maintainers
Sources
mirage-4.7.0.tbz
sha256=ade8c410b2de3997c4a513f53f6c990dac6af508161e20df01b64fa7975ca5be
sha512=42fddf09be84c4251417145b88d4f63b41db1b29c9622b2b4e4508e31146f227a16875e670da96251208745f79a42f0b7d2bd8b44b883a705381b4c97a4255b8
doc/src/mirage.devices/stack.ml.html
Source file stack.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
open Functoria.DSL open Arp open Ethernet open Ip open Mclock open Misc open Network open Qubesdb open Random open Tcp open Time open Udp let dhcp_ipv4 ?random ?clock ?time tap e a = ipv4_of_dhcp ?random ?clock ?time tap e a let static_ipv4 ?group ?config ?no_init e a = create_ipv4 ?group ?config ?no_init e a let qubes_ipv4 ?(qubesdb = default_qubesdb) e a = ipv4_qubes qubesdb e a (** dual stack *) type stackv4v6 = STACKV4V6 let stackv4v6 = typ STACKV4V6 let stackv4v6_direct_conf () = let packages_v = right_tcpip_library ~sublibs:[ "stack-direct" ] "tcpip" in let connect _i modname = function | [ _t; _r; interface; ethif; arp; ipv4v6; icmpv4; udp; tcp ] -> code ~pos:__POS__ "%s.connect %s %s %s %s %s %s %s" modname interface ethif arp ipv4v6 icmpv4 udp tcp | _ -> connect_err "direct stack" 9 in impl ~packages_v ~connect "Tcpip_stack_direct.MakeV4V6" (time @-> random @-> network @-> ethernet @-> arpv4 @-> ipv4v6 @-> Icmp.icmpv4 @-> udp @-> tcp @-> stackv4v6) let direct_stackv4v6 ?(mclock = default_monotonic_clock) ?(random = default_random) ?(time = default_time) ?tcp ~ipv4_only ~ipv6_only network eth arp ipv4 ipv6 = let ip = keyed_ipv4v6 ~ipv4_only ~ipv6_only ipv4 ipv6 in stackv4v6_direct_conf () $ time $ random $ network $ eth $ arp $ ip $ Icmp.direct_icmpv4 ipv4 $ direct_udp ~random ip $ match tcp with None -> direct_tcp ~mclock ~random ~time ip | Some tcp -> tcp let static_ipv4v6_stack ?group ?ipv6_config ?ipv4_config ?(arp = arp ?time:None) ?tcp tap = let ipv4_only = Runtime_arg.ipv4_only ?group () and ipv6_only = Runtime_arg.ipv6_only ?group () in let e = ethif tap in let a = arp e in let i4 = create_ipv4 ?group ?config:ipv4_config ~no_init:ipv6_only e a in let i6 = create_ipv6 ?group ?config:ipv6_config ~no_init:ipv4_only tap e in direct_stackv4v6 ~ipv4_only ~ipv6_only ?tcp tap e a i4 i6 let generic_ipv4v6_stack p ?group ?ipv6_config ?ipv4_config ?(arp = arp ?time:None) ?tcp tap = let ipv4_only = Runtime_arg.ipv4_only ?group () and ipv6_only = Runtime_arg.ipv6_only ?group () in let e = ethif tap in let a = arp e in let i4 = match_impl p [ (`Qubes, qubes_ipv4 e a); (`Dhcp, dhcp_ipv4 tap e a) ] ~default:(static_ipv4 ?group ?config:ipv4_config ~no_init:ipv6_only e a) in let i6 = create_ipv6 ?group ?config:ipv6_config ~no_init:ipv4_only tap e in direct_stackv4v6 ~ipv4_only ~ipv6_only ?tcp tap e a i4 i6 let socket_stackv4v6 ?(group = "") () = let v4key = Runtime_arg.V4.network ~group Ipaddr.V4.Prefix.global in let v6key = Runtime_arg.V6.network ~group None in let ipv4_only = Runtime_arg.ipv4_only ~group () in let ipv6_only = Runtime_arg.ipv6_only ~group () in let packages_v = right_tcpip_library ~sublibs:[ "stack-socket" ] "tcpip" in let extra_deps = [ dep (udpv4v6_socket_conf ~ipv4_only ~ipv6_only v4key v6key); dep (tcpv4v6_socket_conf ~ipv4_only ~ipv6_only v4key v6key); ] in let connect _i modname = function | [ udp; tcp ] -> code ~pos:__POS__ "%s.connect %s %s" modname udp tcp | _ -> connect_err "socket_stackv4v6" 2 in impl ~packages_v ~extra_deps ~connect "Tcpip_stack_socket.V4V6" stackv4v6 (** Generic stack *) let generic_stackv4v6 ?group ?ipv6_config ?ipv4_config ?(dhcp_key = Key.value @@ Key.dhcp ?group ()) ?(net_key = Key.value @@ Key.net ?group ()) ?tcp (tap : network impl) : stackv4v6 impl = let choose target net dhcp = match (target, net, dhcp) with | `Qubes, _, _ -> `Qubes | _, Some `Host, _ -> `Socket | _, _, true -> `Dhcp | (`Unix | `MacOSX), None, false -> `Socket | _, _, _ -> `Static in let p = Key.(pure choose $ Key.(value target) $ net_key $ dhcp_key) in match_impl p [ (`Socket, socket_stackv4v6 ?group ()) ] ~default:(generic_ipv4v6_stack p ?group ?ipv6_config ?ipv4_config ?tcp tap)
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>