diff --git a/console/ifconfig.js b/console/ifconfig.js index 639923f65ee2cbddc3f4149bae11f770c1599f14..8617811eea7f4dc88d3b8a7b41bad162fe5611f1 100644 --- a/console/ifconfig.js +++ b/console/ifconfig.js @@ -6,6 +6,11 @@ var ifconfig_cmd = { var rc = networking_interface.set_ip(ifname, ip, netmask); return rc; }, + + if_up: function(ifname) { + var rc = networking_interface.if_up(ifname); + return rc; + }, invoke: function(inp) { if (inp.length != 6) { @@ -23,6 +28,11 @@ var ifconfig_cmd = { if (!rc) { print ("ifconfig: unable to set ip, wrong input"); } + + rc = this.if_up(ifname); + if (!rc) { + print ("ifconfig: unable to ifup interface"); + } }, help: function() { diff --git a/java/cli/com/cloudius/cli/util/Networking.java b/java/cli/com/cloudius/cli/util/Networking.java index 47a5b9b19391b8b18db153174c36ee5aac402a74..2d123a3c7313b56321b52ea9ae2b7cfd052b3adb 100644 --- a/java/cli/com/cloudius/cli/util/Networking.java +++ b/java/cli/com/cloudius/cli/util/Networking.java @@ -23,6 +23,17 @@ public class Networking extends ScriptableObject { } } + @JSFunction + public static boolean if_up(String ifname) + { + try { + IFConfig.if_up(ifname); + return true; + } catch (IOException e) { + return false; + } + } + @Override public String getClassName() { return "Networking"; diff --git a/java/cloudius/com/cloudius/net/IFConfig.java b/java/cloudius/com/cloudius/net/IFConfig.java index e5d2c4c11c5b2b89d8adb13b244b008dd41a804e..b054d7cdb1b38da1eb300fda1a3fe2ecf7cb6d72 100644 --- a/java/cloudius/com/cloudius/net/IFConfig.java +++ b/java/cloudius/com/cloudius/net/IFConfig.java @@ -11,4 +11,7 @@ public class IFConfig { public native static void set_ip(String ifname, String ip, String netmask) throws IOException; + + public native static void if_up(String ifname) throws IOException; + } diff --git a/java/jni/networking.cc b/java/jni/networking.cc index 8e46a064bb206e77eeeb7fa61af0053350beacca..8c77e44224806e6dc1308cd164afea77c40c25bd 100644 --- a/java/jni/networking.cc +++ b/java/jni/networking.cc @@ -23,3 +23,22 @@ extern "C" JNIEXPORT void JNICALL Java_com_cloudius_net_IFConfig_set_1ip env->ReleaseStringUTFChars(ip, ip_c); env->ReleaseStringUTFChars(netmask, netmask_c); } + +/* + * Class: com_cloudius_net_IFConfig + * Method: if_up + * Signature: (Ljava/lang/String;)V + */ +extern "C" JNIEXPORT void JNICALL Java_com_cloudius_net_IFConfig_if_1up + (JNIEnv *env , jclass self, jstring ifname) +{ + const char * ifname_c = env->GetStringUTFChars(ifname, 0); + + int error = osv_ifup(ifname_c); + if (error) { + jclass cls = env->FindClass("java/io/IOException"); + env->ThrowNew(cls, "osv_ifup failed"); + } + + env->ReleaseStringUTFChars(ifname, ifname_c); +}