aboutsummaryrefslogtreecommitdiffstats
path: root/src/dumm
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2009-07-02 17:11:28 +0200
committerTobias Brunner <tobias@strongswan.org>2010-10-12 15:03:37 +0200
commit9b0847dd9a4be17cc667aa7e2cdea14092609053 (patch)
tree2ada9f01981f635cded08338c244db7d495d17f6 /src/dumm
parentf29396b87e57bc504aa3384f52817b4d2e5166c3 (diff)
downloadstrongswan-9b0847dd9a4be17cc667aa7e2cdea14092609053.tar.bz2
strongswan-9b0847dd9a4be17cc667aa7e2cdea14092609053.tar.xz
Exposed the mutli-overlay functionality in the ruby bindings.
Overlays can be added to individual guests (which overlays exactly the supplied directory) or to all guests (which overlays a subdirectory with the guest's name to each guest). The template functionality is provided as before.
Diffstat (limited to 'src/dumm')
-rw-r--r--src/dumm/ext/dumm.c68
-rw-r--r--src/dumm/ext/lib/dumm.rb6
-rw-r--r--src/dumm/ext/lib/dumm/guest.rb5
3 files changed, 71 insertions, 8 deletions
diff --git a/src/dumm/ext/dumm.c b/src/dumm/ext/dumm.c
index 230e8ae68..a970046fe 100644
--- a/src/dumm/ext/dumm.c
+++ b/src/dumm/ext/dumm.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008 Tobias Brunner
+ * Copyright (C) 2008-2009 Tobias Brunner
* Copyright (C) 2008 Martin Willi
* Hochschule fuer Technik Rapperswil
*
@@ -85,6 +85,38 @@ static void sigchld_handler(int signal, siginfo_t *info, void* ptr)
enumerator->destroy(enumerator);
}
+
+/**
+ * Global Dumm bindings
+ */
+static VALUE dumm_add_overlay(VALUE class, VALUE dir)
+{
+ if (!dumm->add_overlay(dumm, StringValuePtr(dir)))
+ {
+ rb_raise(rb_eRuntimeError, "loading overlay failed");
+ }
+ return class;
+}
+
+static VALUE dumm_del_overlay(VALUE class, VALUE dir)
+{
+ return dumm->del_overlay(dumm, StringValuePtr(dir)) ? Qtrue : Qfalse;
+}
+
+static VALUE dumm_pop_overlay(VALUE class)
+{
+ return dumm->pop_overlay(dumm) ? Qtrue : Qfalse;
+}
+
+static void dumm_init()
+{
+ rbm_dumm = rb_define_module("Dumm");
+
+ rb_define_module_function(rbm_dumm, "add_overlay", dumm_add_overlay, 1);
+ rb_define_module_function(rbm_dumm, "del_overlay", dumm_del_overlay, 1);
+ rb_define_module_function(rbm_dumm, "pop_overlay", dumm_pop_overlay, 0);
+}
+
/**
* Guest bindings
*/
@@ -330,6 +362,34 @@ static VALUE guest_delete(VALUE self)
return Qnil;
}
+static VALUE guest_add_overlay(VALUE self, VALUE dir)
+{
+ guest_t *guest;
+
+ Data_Get_Struct(self, guest_t, guest);
+ if (!guest->add_overlay(guest, StringValuePtr(dir)))
+ {
+ rb_raise(rb_eRuntimeError, "loading overlay failed");
+ }
+ return self;
+}
+
+static VALUE guest_del_overlay(VALUE self, VALUE dir)
+{
+ guest_t *guest;
+
+ Data_Get_Struct(self, guest_t, guest);
+ return guest->del_overlay(guest, StringValuePtr(dir)) ? Qtrue : Qfalse;
+}
+
+static VALUE guest_pop_overlay(VALUE self)
+{
+ guest_t *guest;
+
+ Data_Get_Struct(self, guest_t, guest);
+ return guest->pop_overlay(guest) ? Qtrue : Qfalse;
+}
+
static void guest_init()
{
rbc_guest = rb_define_class_under(rbm_dumm , "Guest", rb_cObject);
@@ -354,6 +414,9 @@ static void guest_init()
rb_define_method(rbc_guest, "include?", guest_find_iface, 1);
rb_define_method(rbc_guest, "iface?", guest_find_iface, 1);
rb_define_method(rbc_guest, "delete", guest_delete, 0);
+ rb_define_method(rbc_guest, "add_overlay", guest_add_overlay, 1);
+ rb_define_method(rbc_guest, "del_overlay", guest_del_overlay, 1);
+ rb_define_method(rbc_guest, "pop_overlay", guest_pop_overlay, 0);
}
/**
@@ -711,8 +774,7 @@ void Init_dumm()
dumm = dumm_create(NULL);
- rbm_dumm = rb_define_module("Dumm");
-
+ dumm_init();
guest_init();
bridge_init();
iface_init();
diff --git a/src/dumm/ext/lib/dumm.rb b/src/dumm/ext/lib/dumm.rb
index 25939e9f4..bb60aad8f 100644
--- a/src/dumm/ext/lib/dumm.rb
+++ b/src/dumm/ext/lib/dumm.rb
@@ -1,5 +1,5 @@
=begin
- Copyright (C) 2008 Tobias Brunner
+ Copyright (C) 2008-2009 Tobias Brunner
Hochschule fuer Technik Rapperswil
This program is free software; you can redistribute it and/or modify it
@@ -38,11 +38,11 @@ module Dumm
end
end
- # unload templates, reset all guests and delete bridges
+ # unload template/overlays, reset all guests and delete bridges
def reset
Template.unload
Guest.each { |guest|
- guest.reset if guest.running?
+ guest.reset
}
Bridge.each { |bridge|
bridge.delete
diff --git a/src/dumm/ext/lib/dumm/guest.rb b/src/dumm/ext/lib/dumm/guest.rb
index 936f512dd..e689cc065 100644
--- a/src/dumm/ext/lib/dumm/guest.rb
+++ b/src/dumm/ext/lib/dumm/guest.rb
@@ -1,5 +1,5 @@
=begin
- Copyright (C) 2008 Tobias Brunner
+ Copyright (C) 2008-2009 Tobias Brunner
Hochschule fuer Technik Rapperswil
This program is free software; you can redistribute it and/or modify it
@@ -33,8 +33,9 @@ module Dumm
self[id]
end
- # delete all interfaces
+ # remove all overlays, delete all interfaces
def reset
+ while pop_overlay; end
each {|i|
i.delete
}