summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/vyconf.proto5
-rw-r--r--src/session.ml3
-rw-r--r--src/session.mli2
-rw-r--r--src/vyconf_pbt.ml57
-rw-r--r--src/vyconf_pbt.mli20
-rw-r--r--src/vyconfd.ml9
6 files changed, 96 insertions, 0 deletions
diff --git a/data/vyconf.proto b/data/vyconf.proto
index 5fc9f76..69bc1d4 100644
--- a/data/vyconf.proto
+++ b/data/vyconf.proto
@@ -34,6 +34,10 @@ message Request {
repeated string Path = 1;
}
+ message Discard {
+ optional int32 dummy = 1;
+ }
+
message Rename {
repeated string EditLevel = 1;
required string From = 2;
@@ -149,6 +153,7 @@ message Request {
Teardown teardown = 22;
ReloadReftree reload_reftree = 23;
Load load = 24;
+ Discard discard = 25;
}
}
diff --git a/src/session.ml b/src/session.ml
index 5f0d5a3..953df25 100644
--- a/src/session.ml
+++ b/src/session.ml
@@ -107,6 +107,9 @@ 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 discard w s =
+ {s with proposed_config=w.running_config}
+
let load w s file =
let ct = Vyos1x.Config_file.load_config file in
match ct with
diff --git a/src/session.mli b/src/session.mli
index f756858..af12af8 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 discard : world -> session_data -> session_data
+
val load : world -> session_data -> string -> session_data
val save : world -> session_data -> string -> session_data
diff --git a/src/vyconf_pbt.ml b/src/vyconf_pbt.ml
index 09e84fb..c8e76ef 100644
--- a/src/vyconf_pbt.ml
+++ b/src/vyconf_pbt.ml
@@ -32,6 +32,10 @@ type request_delete = {
path : string list;
}
+type request_discard = {
+ dummy : int32 option;
+}
+
type request_rename = {
edit_level : string list;
from : string;
@@ -142,6 +146,7 @@ type request =
| Teardown of request_teardown
| Reload_reftree of request_reload_reftree
| Load of request_load
+ | Discard of request_discard
type request_envelope = {
token : string option;
@@ -206,6 +211,12 @@ let rec default_request_delete
path;
}
+let rec default_request_discard
+ ?dummy:((dummy:int32 option) = None)
+ () : request_discard = {
+ dummy;
+}
+
let rec default_request_rename
?edit_level:((edit_level:string list) = [])
?from:((from:string) = "")
@@ -408,6 +419,14 @@ let default_request_delete_mutable () : request_delete_mutable = {
path = [];
}
+type request_discard_mutable = {
+ mutable dummy : int32 option;
+}
+
+let default_request_discard_mutable () : request_discard_mutable = {
+ dummy = None;
+}
+
type request_rename_mutable = {
mutable edit_level : string list;
mutable from : string;
@@ -646,6 +665,12 @@ let rec pp_request_delete fmt (v:request_delete) =
in
Pbrt.Pp.pp_brk pp_i fmt ()
+let rec pp_request_discard fmt (v:request_discard) =
+ let pp_i fmt () =
+ Pbrt.Pp.pp_record_field ~first:true "dummy" (Pbrt.Pp.pp_option Pbrt.Pp.pp_int32) fmt v.dummy;
+ in
+ Pbrt.Pp.pp_brk pp_i fmt ()
+
let rec pp_request_rename fmt (v:request_rename) =
let pp_i fmt () =
Pbrt.Pp.pp_record_field ~first:true "edit_level" (Pbrt.Pp.pp_list Pbrt.Pp.pp_string) fmt v.edit_level;
@@ -797,6 +822,7 @@ let rec pp_request fmt (v:request) =
| 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
+ | Discard x -> Format.fprintf fmt "@[<hv2>Discard(@,%a)@]" pp_request_discard x
let rec pp_request_envelope fmt (v:request_envelope) =
let pp_i fmt () =
@@ -894,6 +920,15 @@ let rec encode_pb_request_delete (v:request_delete) encoder =
) v.path encoder;
()
+let rec encode_pb_request_discard (v:request_discard) encoder =
+ begin match v.dummy with
+ | Some x ->
+ Pbrt.Encoder.int32_as_varint x encoder;
+ Pbrt.Encoder.key 1 Pbrt.Varint encoder;
+ | None -> ();
+ end;
+ ()
+
let rec encode_pb_request_rename (v:request_rename) encoder =
Pbrt.List_util.rev_iter_with (fun x encoder ->
Pbrt.Encoder.string x encoder;
@@ -1158,6 +1193,9 @@ let rec encode_pb_request (v:request) encoder =
| Load x ->
Pbrt.Encoder.nested encode_pb_request_load x encoder;
Pbrt.Encoder.key 24 Pbrt.Bytes encoder;
+ | Discard x ->
+ Pbrt.Encoder.nested encode_pb_request_discard x encoder;
+ Pbrt.Encoder.key 25 Pbrt.Bytes encoder;
end
let rec encode_pb_request_envelope (v:request_envelope) encoder =
@@ -1333,6 +1371,24 @@ let rec decode_pb_request_delete d =
path = v.path;
} : request_delete)
+let rec decode_pb_request_discard d =
+ let v = default_request_discard_mutable () in
+ let continue__= ref true in
+ while !continue__ do
+ match Pbrt.Decoder.key d with
+ | None -> (
+ ); continue__ := false
+ | Some (1, Pbrt.Varint) -> begin
+ v.dummy <- Some (Pbrt.Decoder.int32_as_varint d);
+ end
+ | Some (1, pk) ->
+ Pbrt.Decoder.unexpected_payload "Message(request_discard), field(1)" pk
+ | Some (_, payload_kind) -> Pbrt.Decoder.skip d payload_kind
+ done;
+ ({
+ dummy = v.dummy;
+ } : request_discard)
+
let rec decode_pb_request_rename d =
let v = default_request_rename_mutable () in
let continue__= ref true in
@@ -1803,6 +1859,7 @@ let rec decode_pb_request d =
| 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 (25, _) -> (Discard (decode_pb_request_discard (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 c233267..b4affb8 100644
--- a/src/vyconf_pbt.mli
+++ b/src/vyconf_pbt.mli
@@ -39,6 +39,10 @@ type request_delete = {
path : string list;
}
+type request_discard = {
+ dummy : int32 option;
+}
+
type request_rename = {
edit_level : string list;
from : string;
@@ -149,6 +153,7 @@ type request =
| Teardown of request_teardown
| Reload_reftree of request_reload_reftree
| Load of request_load
+ | Discard of request_discard
type request_envelope = {
token : string option;
@@ -217,6 +222,12 @@ val default_request_delete :
request_delete
(** [default_request_delete ()] is the default value for type [request_delete] *)
+val default_request_discard :
+ ?dummy:int32 option ->
+ unit ->
+ request_discard
+(** [default_request_discard ()] is the default value for type [request_discard] *)
+
val default_request_rename :
?edit_level:string list ->
?from:string ->
@@ -385,6 +396,9 @@ val pp_request_set : Format.formatter -> request_set -> unit
val pp_request_delete : Format.formatter -> request_delete -> unit
(** [pp_request_delete v] formats v *)
+val pp_request_discard : Format.formatter -> request_discard -> unit
+(** [pp_request_discard v] formats v *)
+
val pp_request_rename : Format.formatter -> request_rename -> unit
(** [pp_request_rename v] formats v *)
@@ -478,6 +492,9 @@ val encode_pb_request_set : request_set -> Pbrt.Encoder.t -> unit
val encode_pb_request_delete : request_delete -> Pbrt.Encoder.t -> unit
(** [encode_pb_request_delete v encoder] encodes [v] with the given [encoder] *)
+val encode_pb_request_discard : request_discard -> Pbrt.Encoder.t -> unit
+(** [encode_pb_request_discard v encoder] encodes [v] with the given [encoder] *)
+
val encode_pb_request_rename : request_rename -> Pbrt.Encoder.t -> unit
(** [encode_pb_request_rename v encoder] encodes [v] with the given [encoder] *)
@@ -571,6 +588,9 @@ val decode_pb_request_set : Pbrt.Decoder.t -> request_set
val decode_pb_request_delete : Pbrt.Decoder.t -> request_delete
(** [decode_pb_request_delete decoder] decodes a [request_delete] binary value from [decoder] *)
+val decode_pb_request_discard : Pbrt.Decoder.t -> request_discard
+(** [decode_pb_request_discard decoder] decodes a [request_discard] binary value from [decoder] *)
+
val decode_pb_request_rename : Pbrt.Decoder.t -> request_rename
(** [decode_pb_request_rename decoder] decodes a [request_rename] binary value from [decoder] *)
diff --git a/src/vyconfd.ml b/src/vyconfd.ml
index e531278..e37a6ae 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 discard world token (_req: request_discard) =
+ try
+ let session = Session.discard world (find_session token)
+ in
+ Hashtbl.replace sessions token session;
+ 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
@@ -266,6 +274,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, Discard r -> discard world t r
| Some t, Load r -> load world t r
| Some t, Save r -> save world t r
| _ -> failwith "Unimplemented"