Merge pull request #2013 from yomimono/use-newer-dhcp-client

MirageSDK: Use newer dhcp client
This commit is contained in:
Justin Cormack 2017-06-09 20:49:40 +01:00 committed by GitHub
commit a4d36e5f63
4 changed files with 27 additions and 40 deletions

View File

@ -13,7 +13,7 @@ services:
- name: rngd - name: rngd
image: mobylinux/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9 image: mobylinux/rngd:3dad6dd43270fa632ac031e99d1947f20b22eec9
- name: dhcp-client - name: dhcp-client
image: mobylinux/dhcp-client:a7a6b49b0ff51ffa2f44ac848cd649e29f946e0c image: linuxkitprojects/dhcp-client:6c231135a88d42e7d18d2ba952f0798910550cbd
net: host net: host
capabilities: capabilities:
- CAP_NET_ADMIN # to bring eth0 up - CAP_NET_ADMIN # to bring eth0 up

View File

@ -5,7 +5,7 @@ FROM alpine:3.5 as capnp
RUN mkdir -p /src RUN mkdir -p /src
RUN apk update && apk add autoconf automake libtool linux-headers git g++ make RUN apk update && apk add autoconf automake libtool linux-headers git g++ make
RUN cd /src && git clone https://github.com/sandstorm-io/capnproto.git RUN cd /src && git clone -b v0.6.0 https://github.com/sandstorm-io/capnproto.git
WORKDIR /src/capnproto/c++ WORKDIR /src/capnproto/c++
RUN ./setup-autotools.sh RUN ./setup-autotools.sh
RUN autoreconf -i RUN autoreconf -i
@ -18,20 +18,20 @@ RUN which capnp
### SDK ### SDK
FROM ocaml/opam:alpine-3.5_ocaml-4.04.0 as sdk FROM ocaml/opam:alpine-3.5_ocaml-4.04.0 as sdk
RUN git -C /home/opam/opam-repository pull && opam update -u
COPY --from=capnp /usr/local/bin/capnp /usr/local/bin/ COPY --from=capnp /usr/local/bin/capnp /usr/local/bin/
COPY --from=capnp /usr/local/lib/libcapnpc-0.6-dev.so /usr/local/lib/ COPY --from=capnp /usr/local/lib/libcapnpc-0.6.0.so /usr/local/lib/
COPY --from=capnp /usr/local/lib/libcapnp-0.6-dev.so /usr/local/lib/ COPY --from=capnp /usr/local/lib/libcapnp-0.6.0.so /usr/local/lib/
COPY --from=capnp /usr/local/lib/libkj-0.6-dev.so /usr/local/lib/ COPY --from=capnp /usr/local/lib/libkj-0.6.0.so /usr/local/lib/
RUN sudo mkdir -p /src RUN sudo mkdir -p /src
USER opam USER opam
WORKDIR /src WORKDIR /src
RUN opam pin add jbuilder 1.0+beta7 -n RUN git -C /home/opam/opam-repository pull && opam update -u
RUN opam pin add jbuilder 1.0+beta10 -n
RUN opam depext -uiy cstruct lwt logs irmin-git rawlink tuntap astring rresult \ RUN opam depext -uiy cstruct cstruct-lwt lwt lwt logs irmin-git rawlink tuntap astring rresult \
mirage-flow-lwt mirage-channel-lwt io-page decompress capnp mirage-flow-lwt mirage-channel-lwt io-page decompress capnp
RUN opam list RUN opam list
@ -64,7 +64,7 @@ RUN sudo cp /src/_build/default/dhcp-client/main.exe /bin/dhcp-client
FROM sdk as calf FROM sdk as calf
RUN opam pin add charrua-client https://github.com/yomimono/charrua-client.git#state-halfway -n RUN opam pin add charrua-client https://github.com/yomimono/charrua-client.git#with-cdhcpc -n
RUN opam pin add mirage-net-fd 0.2.0 -n RUN opam pin add mirage-net-fd 0.2.0 -n
RUN opam depext -iy mirage-net-fd charrua-client lwt mirage-types-lwt cmdliner RUN opam depext -iy mirage-net-fd charrua-client lwt mirage-types-lwt cmdliner
@ -77,6 +77,7 @@ RUN sudo chown opam -R /src
RUN opam config exec -- jbuilder build dhcp-client-calf/unikernel.exe RUN opam config exec -- jbuilder build dhcp-client-calf/unikernel.exe
RUN sudo mkdir -p /bin/calf RUN sudo mkdir -p /bin/calf
RUN sudo cp /src/_build/default/dhcp-client-calf/unikernel.exe /bin/calf/dhcp-client-calf RUN sudo cp /src/_build/default/dhcp-client-calf/unikernel.exe /bin/calf/dhcp-client-calf
USER 0
### Final build ### Final build

View File

@ -23,13 +23,13 @@ hash: Makefile Dockerfile $(FILES) .build
| sha1sum | sed 's/ .*//' > $@ | sha1sum | sed 's/ .*//' > $@
tag: .build tag: .build
docker tag $(IMAGE) mobylinux/$(IMAGE):$(shell cat hash) docker tag $(IMAGE) linuxkitprojects/$(IMAGE):$(shell cat hash)
push: hash .build push: hash .build
docker pull $(BASE) docker pull $(BASE)
docker pull mobylinux/$(IMAGE):$(shell cat hash) || \ docker pull linuxkitprojects/$(IMAGE):$(shell cat hash) || \
(docker tag $(IMAGE) mobylinux/$(IMAGE):$(shell cat hash) && \ (docker tag $(IMAGE) linuxkitprojects/$(IMAGE):$(shell cat hash) && \
docker push mobylinux/$(IMAGE):$(shell cat hash)) docker push linuxkitprojects/$(IMAGE):$(shell cat hash))
clean:: clean::
rm -rf hash .build rm -rf hash .build

View File

@ -13,13 +13,17 @@ type t = {
nameservers: Ipaddr.V4.t list; nameservers: Ipaddr.V4.t list;
} }
(* FIXME: we loose lots of info here *) (* FIXME: we (still) lose lots of info here *)
let of_ipv4_config (t: Mirage_protocols_lwt.ipv4_config) = let of_lease (t: Dhcp_wire.pkt) =
{ address = t.Mirage_protocols_lwt.address; let gateway = match Dhcp_wire.collect_routers t.Dhcp_wire.options with
gateway = t.Mirage_protocols_lwt.gateway; | [] -> None
domain = None; | n::_ -> Some n
search = None; in
nameservers = [] } { address = t.Dhcp_wire.yiaddr;
gateway;
domain = Dhcp_wire.find_domain_name t.Dhcp_wire.options;
search = Dhcp_wire.find_domain_search t.Dhcp_wire.options;
nameservers = Dhcp_wire.collect_dns_servers t.Dhcp_wire.options }
let pp ppf t = let pp ppf t =
Fmt.pf ppf "\n\ Fmt.pf ppf "\n\
@ -32,24 +36,6 @@ let pp ppf t =
Fmt.(option ~none:(unit "--") string) t.search Fmt.(option ~none:(unit "--") string) t.search
Fmt.(list ~sep:(unit " ") Ipaddr.V4.pp_hum) t.nameservers Fmt.(list ~sep:(unit " ") Ipaddr.V4.pp_hum) t.nameservers
let of_pkt lease =
let open Dhcp_wire in
(* ipv4_config expects a single IP address and the information
* needed to construct a prefix. It can optionally use one router. *)
let address = lease.yiaddr in
let gateway = match Dhcp_wire.collect_routers lease.options with
| [] -> None
| h::_ -> Some h
in
let domain = Dhcp_wire.find_domain_name lease.options in
let search = Dhcp_wire.find_domain_search lease.options in
let nameservers = Dhcp_wire.collect_name_servers lease.options in
{ address; gateway; domain; search; nameservers }
let of_pkt_opt = function
| None -> None
| Some lease -> Some (of_pkt lease)
let parse_option_code str = let parse_option_code str =
match Dhcp_wire.string_to_option_code str with match Dhcp_wire.string_to_option_code str with
| Some x -> Ok x | Some x -> Ok x
@ -173,7 +159,7 @@ let setup_log =
(* FIXME: module Main ... *) (* FIXME: module Main ... *)
module Dhcp_client = Dhcp_client_mirage.Make(Time)(Net) module Dhcp_client = Dhcp_client_lwt.Make(Time)(Net)
let pp_path = Fmt.(list ~sep:(unit "/") string) let pp_path = Fmt.(list ~sep:(unit "/") string)
@ -209,7 +195,7 @@ let start () dhcp_codes net ctl =
in in
Dhcp_client.connect ~requests net >>= fun stream -> Dhcp_client.connect ~requests net >>= fun stream ->
Lwt_stream.last_new stream >>= fun result -> Lwt_stream.last_new stream >>= fun result ->
let result = of_ipv4_config result in let result = of_lease result in
Log.info (fun l -> l "found lease: %a" pp result); Log.info (fun l -> l "found lease: %a" pp result);
set_ip ctl ["ip"] result.address >>= fun () -> set_ip ctl ["ip"] result.address >>= fun () ->
set_ip_opt ctl ["gateway"] result.gateway set_ip_opt ctl ["gateway"] result.gateway