X-Git-Url: http://git.sameswireless.fr/l2tpns.git/blobdiff_plain/c239d4b22829335fda98b66ce045a3f624436eeb..3338e64bfce8a52c25fd85aeb14ac622d921938d:/control.h?ds=inline

diff --git a/control.h b/control.h
index 60e0d03..8dd159c 100644
--- a/control.h
+++ b/control.h
@@ -1,18 +1,54 @@
 #ifndef __CONTROL_H__
 #define __CONTROL_H__
 
-#define PKT_RESP_OK		1
-#define PKT_RESP_ERROR		2
+#define NSCTL_PORT		1702
+#define NSCTL_MAGIC		0x9013
 
-#define PKT_LOAD_PLUGIN		5
-#define PKT_UNLOAD_PLUGIN	6
+/* builtin commands */
+#define NSCTL_REQUEST		(1 << 4)
+#define NSCTL_REQ_LOAD		(NSCTL_REQUEST | 1)
+#define NSCTL_REQ_UNLOAD	(NSCTL_REQUEST | 2)
+#define NSCTL_REQ_HELP		(NSCTL_REQUEST | 3)
 
-#define PKT_GARDEN		1000
-#define PKT_UNGARDEN		1001
+/* general control message, passed to plugins */
+#define NSCTL_REQ_CONTROL	(NSCTL_REQUEST | 4)
 
-int new_packet(short type, char *packet);
-int send_packet(int sockfd, int dest_ip, int dest_port, char *packet, int len);
-void dump_packet(char *packet, FILE *stream);
-int read_packet(int sockfd, char *packet);
+/* response messages */
+#define NSCTL_RESPONSE		(1 << 5)
+#define NSCTL_RES_OK		(NSCTL_RESPONSE | 1)
+#define NSCTL_RES_ERR		(NSCTL_RESPONSE | 2)
+
+/* unpack errors */
+#define NSCTL_ERR_SHORT		-1	// short packet
+#define NSCTL_ERR_LONG		-2	// packet exceeds max, or trailing cr*p
+#define NSCTL_ERR_MAGIC		-3	// invalid magic number
+#define NSCTL_ERR_TYPE		-4	// unrecognised type
+
+#define NSCTL_MAX_PKT_SZ	4096
+
+struct nsctl_packet {
+    u16 magic;
+    u8 type;
+    u8 argc;
+    char argv[NSCTL_MAX_PKT_SZ - 4];
+} __attribute__ ((packed));
+
+#define NSCTL_MAX_ARG_SZ	512
+
+struct nsctl_args {
+    u8 len;
+    char value[NSCTL_MAX_ARG_SZ - 1];
+} __attribute__ ((packed));
+
+/* parsed packet */
+struct nsctl {
+    u8 type;
+    u8 argc;
+    char *argv[0xff];
+};
+
+int pack_control(char *data, int len, u8 type, int argc, char *argv[]);
+int unpack_control(struct nsctl *packet, char *data, int len);
+void dump_control(struct nsctl *control, FILE *stream);
 
 #endif /* __CONTROL_H__ */