summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/session.ml7
-rw-r--r--src/session.mli2
-rw-r--r--src/vyconf_pbt.ml6
-rw-r--r--src/vyconf_pbt.mli1
-rw-r--r--src/vyconfd.ml9
5 files changed, 25 insertions, 0 deletions
diff --git a/src/session.ml b/src/session.ml
index 8aeffb3..1843682 100644
--- a/src/session.ml
+++ b/src/session.ml
@@ -107,6 +107,13 @@ let delete w s path =
let config = apply_cfg_op op s.proposed_config in
{s with proposed_config=config; changeset=(op :: s.changeset)}
+let load w s file =
+ let ct = Vyos1x.Config_file.load_config file in
+ match ct with
+ | Error e -> raise (Session_error (Printf.sprintf "Error loading config: %s" e))
+ | Ok config ->
+ validate_tree w config; {s with proposed_config=config;}
+
let get_value w s path =
if not (VT.exists s.proposed_config path) then
raise (Session_error ("Config path does not exist"))
diff --git a/src/session.mli b/src/session.mli
index 2166a80..fec6a4b 100644
--- a/src/session.mli
+++ b/src/session.mli
@@ -32,6 +32,8 @@ val set : world -> session_data -> string list -> session_data
val delete : world -> session_data -> string list -> session_data
+val load : world -> session_data -> string -> session_data
+
val get_value : world -> session_data -> string list -> string
val get_values : world -> session_data -> string list -> string list
diff --git a/src/vyconf_pbt.ml b/src/vyconf_pbt.ml
index 8a781b5..09e84fb 100644
--- a/src/vyconf_pbt.ml
+++ b/src/vyconf_pbt.ml
@@ -141,6 +141,7 @@ type request =
| Validate of request_validate
| Teardown of request_teardown
| Reload_reftree of request_reload_reftree
+ | Load of request_load
type request_envelope = {
token : string option;
@@ -795,6 +796,7 @@ let rec pp_request fmt (v:request) =
| Validate x -> Format.fprintf fmt "@[<hv2>Validate(@,%a)@]" pp_request_validate x
| Teardown x -> Format.fprintf fmt "@[<hv2>Teardown(@,%a)@]" pp_request_teardown x
| Reload_reftree x -> Format.fprintf fmt "@[<hv2>Reload_reftree(@,%a)@]" pp_request_reload_reftree x
+ | Load x -> Format.fprintf fmt "@[<hv2>Load(@,%a)@]" pp_request_load x
let rec pp_request_envelope fmt (v:request_envelope) =
let pp_i fmt () =
@@ -1153,6 +1155,9 @@ let rec encode_pb_request (v:request) encoder =
| Reload_reftree x ->
Pbrt.Encoder.nested encode_pb_request_reload_reftree x encoder;
Pbrt.Encoder.key 23 Pbrt.Bytes encoder;
+ | Load x ->
+ Pbrt.Encoder.nested encode_pb_request_load x encoder;
+ Pbrt.Encoder.key 24 Pbrt.Bytes encoder;
end
let rec encode_pb_request_envelope (v:request_envelope) encoder =
@@ -1797,6 +1802,7 @@ let rec decode_pb_request d =
| Some (21, _) -> (Validate (decode_pb_request_validate (Pbrt.Decoder.nested d)) : request)
| Some (22, _) -> (Teardown (decode_pb_request_teardown (Pbrt.Decoder.nested d)) : request)
| Some (23, _) -> (Reload_reftree (decode_pb_request_reload_reftree (Pbrt.Decoder.nested d)) : request)
+ | Some (24, _) -> (Load (decode_pb_request_load (Pbrt.Decoder.nested d)) : request)
| Some (n, payload_kind) -> (
Pbrt.Decoder.skip d payload_kind;
loop ()
diff --git a/src/vyconf_pbt.mli b/src/vyconf_pbt.mli
index c7e0438..c233267 100644
--- a/src/vyconf_pbt.mli
+++ b/src/vyconf_pbt.mli
@@ -148,6 +148,7 @@ type request =
| Validate of request_validate
| Teardown of request_teardown
| Reload_reftree of request_reload_reftree
+ | Load of request_load
type request_envelope = {
token : string option;
diff --git a/src/vyconfd.ml b/src/vyconfd.ml
index a5117b6..960e523 100644
--- a/src/vyconfd.ml
+++ b/src/vyconfd.ml
@@ -163,6 +163,14 @@ let delete world token (req: request_delete) =
response_tmpl
with Session.Session_error msg -> {response_tmpl with status=Fail; error=(Some msg)}
+let load world token (req: request_load) =
+ try
+ let session = Session.load world (find_session token) req.location
+ in
+ Hashtbl.replace sessions token session;
+ response_tmpl
+ with Session.Session_error msg -> {response_tmpl with status=Fail; error=(Some msg)}
+
let commit world token (req: request_commit) =
let s = find_session token in
let at = world.Session.running_config in
@@ -251,6 +259,7 @@ let rec handle_connection world ic oc () =
| Some t, Validate r -> validate world t r
| Some t, Set r -> set world t r
| Some t, Delete r -> delete world t r
+ | Some t, Load r -> load world t r
| _ -> failwith "Unimplemented"
) |> Lwt.return
end