Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file iptables_daemon_api.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190moduleRpc=structtype('a,'b)t={tag:string;query:'aAsn.t;resp:'bAsn.t}typeuntagged_buffer=Cstruct.tmoduleTag=structtype('a,'b)rpc=('a,'b)ttypet=stringmoduleMap=Map.Make(String)letheadertag=lettag_buffer=Cstruct.of_stringtaginlettag_length_buffer=Cstruct.create4inlettag_length=Cstruct.lengthtag_bufferinCstruct.BE.set_uint32tag_length_buffer0(Int32.of_inttag_length);Cstruct.appendtag_length_buffertag_bufferletvrpc=rpc.tagletstripbuffer=lettag_length=Cstruct.BE.get_uint32buffer0|>Int32.to_intinlettag=Cstruct.to_string~off:4~len:tag_lengthbufferinletheader_length=4+tag_lengthin(tag,Cstruct.subbufferheader_length(Cstruct.lengthbuffer-header_length))letaddtagvalue=letheader=headertaginCstruct.appendheadervalueendtypeerror=[`Parseofstring]letget_clientrpc=letquery_rpc=Asn.(codecder)rpc.queryinletresponse_rpc=Asn.(codecder)rpc.respin((funvalue->Asn.encodequery_rpcvalue),funresponse->let(let*)=Result.bindin(* what to do with the trailing bytes?*)let*value,_=Asn.decoderesponse_rpcresponse|>Result.map_error(fune->(e:>error))inOkvalue)letget_serverrpc=letquery_rpc=Asn.(codecder)rpc.queryinletresponse_rpc=Asn.(codecder)rpc.respin((funrequest->let(let*)=Result.bindin(* what to do with the trailing bytes?*)let*value,_=Asn.decodequery_rpcrequest|>Result.map_error(fune->(e:>error))inOkvalue),funvalue->Asn.encoderesponse_rpcvalue)endmoduleTypes=structmodulePortRedirection=structtypet={source:int;target:int}letppf{source;target}=Fmt.pff"%d -> %d"sourcetargetendmoduleIp=structtypet={ip:Ipaddr.V4.t;tag:string}letppf{ip;tag}=Fmt.pff"%s: %a"tagIpaddr.V4.ppipendmoduleDeploymentInfo=structtypet={ip:Ip.t;ports:PortRedirection.tlist;name:string}letppf{ip;ports;name}=Fmt.pff"%s@%a@[<v 2>@ %a@]"nameIpaddr.V4.ppip.ip(Fmt.listPortRedirection.pp)portsendendmoduleAsn_values=structletport_redirection=letf(source,target)={Types.PortRedirection.source;target}inletg{Types.PortRedirection.source;target}=(source,target)inAsn.S.mapfg@@Asn.S.(sequence2(required~label:"from"int)(required~label:"to"int))letip=Asn.S.mapIpaddr.V4.of_string_exnIpaddr.V4.to_stringAsn.S.printable_stringletip_prefix=Asn.S.mapIpaddr.V4.Prefix.of_string_exnIpaddr.V4.Prefix.to_stringAsn.S.printable_stringletip_tag=letf(ip,tag)={Types.Ip.ip;tag}inletg{Types.Ip.ip;tag}=(ip,tag)inAsn.S.mapfg@@Asn.S.(sequence2(required~label:"ip"ip)(required~label:"tag"printable_string))letdeployment_info=letf(ip,ports,name)={Types.DeploymentInfo.ip;ports;name}inletg{Types.DeploymentInfo.ip;ports;name}=(ip,ports,name)inAsn.S.mapfg@@Asn.S.(sequence3(required~label:"ip"ip_tag)(required~label:"ports"(sequence_ofport_redirection))(required~label:"name"printable_string))moduleError=structletnot_found=Asn.S.null|>Asn.S.map(function()->`Not_found)(function`Not_found->())letfull=Asn.S.null|>Asn.S.map(function()->`Full)(function`Full->())letport_already_allocated=Asn.S.int|>Asn.S.map(functionv->`Port_already_allocatedv)(function`Port_already_allocatedv->v)endendmoduleSpec=structletresultab=Asn.S.choice2ab|>Asn.S.map(function`C1a->Oka|`C2a->Errora)(functionOka->`C1a|Errora->`C2a)moduleIpManager=structletlist={Rpc.tag="ipmanager.list";query=Asn.S.null;resp=Asn.S.sequence_ofAsn_values.ip_tag;}letrequest={Rpc.tag="ipmanager.request";query=Asn.S.(sequence3(requiredprintable_string)(requiredAsn_values.ip_prefix)(required(sequence_ofAsn_values.ip)));resp=resultAsn_values.ip_tagAsn_values.Error.full;}letfree={Rpc.tag="ipmanager.free";query=Asn.S.printable_string;resp=resultAsn_values.ip_tagAsn_values.Error.not_found;}endmoduleDeployments=structletlist={Rpc.tag="deployments.list";query=Asn.S.null;resp=Asn.S.sequence_ofAsn_values.deployment_info;}letcreate={Rpc.tag="deployments.create";query=Asn_values.deployment_info;resp=resultAsn.S.nullAsn_values.Error.port_already_allocated;}letdelete={Rpc.tag="deployments.delete";query=Asn.S.printable_string;resp=resultAsn_values.deployment_infoAsn_values.Error.not_found;}endend