summaryrefslogtreecommitdiff
path: root/ipoe-util
diff options
context:
space:
mode:
authorKozlov Dmitry <xeb@mail.ru>2012-06-26 19:17:34 +0400
committerKozlov Dmitry <xeb@mail.ru>2012-06-26 19:17:34 +0400
commit07264d491f0605088c94e8be9f2b593dd4882067 (patch)
tree58329f975626fc64ce220403721c03463121a12e /ipoe-util
parent2b256df842764409f0d1cd7a37afabcef4e2785b (diff)
downloadaccel-ppp-07264d491f0605088c94e8be9f2b593dd4882067.tar.gz
accel-ppp-07264d491f0605088c94e8be9f2b593dd4882067.zip
ipoe: initial implementation of kernel module
Diffstat (limited to 'ipoe-util')
-rw-r--r--ipoe-util/CMakeLists.txt20
l---------ipoe-util/ipoe.h1
-rw-r--r--ipoe-util/ipses-create.c61
-rw-r--r--ipoe-util/ipses-delete.c58
4 files changed, 140 insertions, 0 deletions
diff --git a/ipoe-util/CMakeLists.txt b/ipoe-util/CMakeLists.txt
new file mode 100644
index 00000000..4f2ad01a
--- /dev/null
+++ b/ipoe-util/CMakeLists.txt
@@ -0,0 +1,20 @@
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+INCLUDE_DIRECTORIES(${CMAKE_HOME_DIRECTORY}/ipses)
+
+if (LIBNL2)
+ ADD_DEFINITIONS("-DLIBNL2")
+endif (LIBNL2)
+
+ADD_EXECUTABLE(ipses-create ipses-create.c)
+
+ADD_EXECUTABLE(ipses-delete ipses-delete.c)
+
+if (LIBNL2)
+ TARGET_LINK_LIBRARIES(ipses-create nl nl-genl m)
+ TARGET_LINK_LIBRARIES(ipses-delete nl nl-genl m)
+else (LIBNL2)
+ TARGET_LINK_LIBRARIES(ipses-create nl)
+ TARGET_LINK_LIBRARIES(ipses-delete nl)
+endif (LIBNL2)
+
+
diff --git a/ipoe-util/ipoe.h b/ipoe-util/ipoe.h
new file mode 120000
index 00000000..7117b41c
--- /dev/null
+++ b/ipoe-util/ipoe.h
@@ -0,0 +1 @@
+../drivers/ipoe/ipoe.h \ No newline at end of file
diff --git a/ipoe-util/ipses-create.c b/ipoe-util/ipses-create.c
new file mode 100644
index 00000000..5aaf1ab7
--- /dev/null
+++ b/ipoe-util/ipses-create.c
@@ -0,0 +1,61 @@
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/ctrl.h>
+
+
+#include "ipoe.h"
+
+int main(int argc, char **argv)
+{
+#if LIBNL2
+ struct nl_sock *h;
+#else
+ struct nl_handle *h;
+#endif
+ struct nl_msg *msg;
+ int family;
+ in_addr_t local, remote;
+ int err;
+
+ if (argc != 4) {
+ printf("usage: ipses-create <ifname> <peer_addr> <addr>\n");
+ return 1;
+ }
+
+ local = inet_addr(argv[2]);
+ remote = inet_addr(argv[3]);
+
+#if LIBNL2
+ h = nl_socket_alloc();
+#else
+ h = nl_handle_alloc();
+#endif
+ genl_connect(h);
+ family = genl_ctrl_resolve(h, IPOE_GENL_NAME);
+
+ msg = nlmsg_alloc();
+ genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, family, 0, NLM_F_REQUEST, IPOE_CMD_CREATE, IPOE_GENL_VERSION);
+ nla_put_u32(msg, IPOE_ATTR_PEER_ADDR, local);
+ nla_put_u32(msg, IPOE_ATTR_ADDR, remote);
+ nla_put_string(msg, IPOE_ATTR_IFNAME, argv[1]);
+
+ nl_send_auto_complete(h, msg);
+ err = nl_recvmsgs_default(h);
+#if LIBNL2
+ printf("recv: %s\n", nl_geterror(err));
+#else
+ nl_perror("recv");
+#endif
+
+ nlmsg_free(msg);
+ nl_close(h);
+
+ return 0;
+}
+
diff --git a/ipoe-util/ipses-delete.c b/ipoe-util/ipses-delete.c
new file mode 100644
index 00000000..4e6a1843
--- /dev/null
+++ b/ipoe-util/ipses-delete.c
@@ -0,0 +1,58 @@
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <string.h>
+#include <errno.h>
+#include <stdio.h>
+
+#include <netlink/netlink.h>
+#include <netlink/genl/genl.h>
+#include <netlink/genl/ctrl.h>
+
+
+#include "ipoe.h"
+
+int main(int argc, char **argv)
+{
+#if LIBNL2
+ struct nl_sock *h;
+#else
+ struct nl_handle *h;
+#endif
+ struct nl_msg *msg;
+ int family;
+ in_addr_t local;
+ int err;
+
+ if (argc != 2) {
+ printf("usage: ipses-delete <addr>\n");
+ return 1;
+ }
+
+ local = inet_addr(argv[1]);
+
+#if LIBNL2
+ h = nl_socket_alloc();
+#else
+ h = nl_handle_alloc();
+#endif
+ genl_connect(h);
+ family = genl_ctrl_resolve(h, IPOE_GENL_NAME);
+
+ msg = nlmsg_alloc();
+ genlmsg_put(msg, NL_AUTO_PID, NL_AUTO_SEQ, family, 0, NLM_F_REQUEST, IPOE_CMD_DELETE, IPOE_GENL_VERSION);
+ nla_put_u32(msg, IPOE_ATTR_PEER_ADDR, local);
+
+ nl_send_auto_complete(h, msg);
+ err = nl_recvmsgs_default(h);
+#if LIBNL2
+ printf("recv: %s\n", nl_geterror(err));
+#else
+ nl_perror("recv");
+#endif
+
+ nlmsg_free(msg);
+ nl_close(h);
+
+ return 0;
+}
+