package mirage
 sectionYPositions = computeSectionYPositions($el), 10)"
  x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
  >
  
  
  The MirageOS library operating system
Install
    
    dune-project
 Dependency
Authors
Maintainers
Sources
  
    
      mirage-4.10.0.tbz
    
    
        
    
  
  
  
    
  
  
    
  
        sha256=795cc176ffbc67363d4c4ef69354aced9681c0b1e24bf93f0a270975ee0b608b
    
    
  sha512=96a2fb3971613b146371a02af1ce59c73ca86dd1f42c0c47334bfbabe7d5f4cffb080c2c585e2e21fe3d33133bbe86b703cb9d276dd86ce3a90a544f03293af5
    
    
  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 110open Functoria.DSL open Arp open Ethernet open Ip open Misc open Network open Qubesdb open Tcp open Udp let dhcp_ipv4 tap e a = ipv4_of_dhcp tap e a let static_ipv4 ?group ~no_init e a = keyed_create_ipv4 ?group ~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 | [ 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" 7 in impl ~packages_v ~connect "Tcpip_stack_direct.MakeV4V6" (network @-> ethernet @-> arpv4 @-> ipv4v6 @-> Icmp.icmpv4 @-> udp @-> tcp @-> stackv4v6) let direct_stackv4v6 ?group ?tcp network eth arp ipv4 ipv6 = let ipv4_only = Runtime_arg.ipv4_only ?group () and ipv6_only = Runtime_arg.ipv6_only ?group () in let ip = keyed_ipv4v6 ~ipv4_only ~ipv6_only ipv4 ipv6 in stackv4v6_direct_conf () $ network $ eth $ arp $ ip $ Icmp.direct_icmpv4 ipv4 $ direct_udp ip $ match tcp with None -> direct_tcp ip | Some tcp -> tcp let keyed_direct_stackv4v6 ?tcp ~ipv4_only ~ipv6_only network eth arp ipv4 ipv6 = let ip = keyed_ipv4v6 ~ipv4_only ~ipv6_only ipv4 ipv6 in stackv4v6_direct_conf () $ network $ eth $ arp $ ip $ Icmp.direct_icmpv4 ipv4 $ direct_udp ip $ match tcp with None -> direct_tcp ip | Some tcp -> tcp let generic_ipv4v6_stack p ?group ?(arp = arp) ?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 ~no_init:ipv6_only e a) in let i6 = keyed_create_ipv6 ?group ~no_init:ipv4_only tap e in keyed_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 ?(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 ?tcp tap)
 sectionYPositions = computeSectionYPositions($el), 10)"
  x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
  >