[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [MirageOS-devel] adding serializers to mirage tcpip



On 12 Jul 2014, at 01:21, Nik Sultana <ns441@xxxxxxxxx> wrote:

> Hwanju and I worked through adding two functions to different structures in 
> mirage-tcpip tonight:

[adding mirageos-devel to this]

> 
>  val get : () -> string
>  val set : string -> ()
> 
> where get collects state information from the structure and returns a string, 
> while set overwrites state information.
> 
> We tried basing this on adding "with sexp" (i.e., s-expression 
> (de)serialisation) to the state datatype in pcb.ml, and the datatypes it 
> refers to.
> 
> This ran into two difficulties. First, we encountered the Set module, from 
> OCaml's standard library. This was easily fixed by copying the module's 
> source code and adding "with sexp" to its types. The second problem was more 
> serious: we hit Lwt_mvar.t. The trick used for Set is harder to pull off 
> here, since we cannot just override a single class, but need to revise a 
> library.

If possible, you want to avoid forking libaries to add serializers.  The way 
that the `with sexp` syntax extension works is that it examines the AST of the 
type definition, and generates two function bodies that inductively add the 
relevant serialisers from the type definition itself.

These look like:

# type t = { a:int } with sexp;;
type t = { a : int; }                                                           
                                                                                
                  val t_of_sexp : Sexplib.Type.t -> t = <fun>                   
                                                                                
                                    val sexp_of_t : t -> Sexplib.Type.t = <fun> 
 

You can also just define these manually, which is how you deal with packages 
that don't define their sexp initializers.  So in the case of Lwt_mvar, don't 
fork Lwt -- think about what the stable serialization and deserialization of 
this should be.

For TCP, it's probably just to create a fresh mvar (although really, we should 
just refactor the TCP stack to eliminate the mvars -- Balraj and I are 
unconvinced that they should ever have been put in there in the first place).

> 
> I tried forking Lwt (from https://github.com/ocsigen/lwt ) but it was not 
> smooth to build on OSX. The configuration script claims that it cannot find 
> pthreads. I might have run into the bug described at 
> https://github.com/ocaml/opam/issues/1236. I reinstalled OCaml as instructed 
> there, but this didn't fix the problem. An alternative would be to downgrade 
> XCode, but I'm reluctant to do this. So, currently I cannot build Lwt 
> natively. If the patches you described in the earlier email are viable, 
> perhaps we could branch off them?

Any time you have a build failure, if you don't include the failing logs it's 
basically impossible to give any useful advice.  One workflow that may be 
helpful with the system compiler is:

$ opam switch -A system lwt-dev
$ eval `opam config env`
$ git clone git://github.com/ocsigen/lwt
$ opam pin lwt lwt/
$ opam install lwt

This will (in a fresh switch) give you an lwt development build, and the logs 
from that failure (if it still fails) will help pinpoint the issue.  Build 
failures for that should go up on https://github.com/ocsigen/lwt/issues and 
you'll probably get a swift answer from the maintainers, since OSX is a popular 
platform (I'll take a look too).

cheers,
Anil


_______________________________________________
MirageOS-devel mailing list
MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.