PERFORCE change 125408 for review
Matus Harvan
mharvan at FreeBSD.org
Mon Aug 20 06:43:55 PDT 2007
http://perforce.freebsd.org/chv.cgi?CH=125408
Change 125408 by mharvan at mharvan_bike-planet on 2007/08/20 13:43:46
added DISPATCH_PLUGIN_SELECT dispatch to explicitly notify the server of
plugin failover
Affected files ...
.. //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.c#10 edit
.. //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.h#5 edit
Differences ...
==== //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.c#10 (text+ko) ====
@@ -105,6 +105,7 @@
static int send_next_frag();
static void cleanup();
+static void send_plugin_select(struct client *cl);
/* GLOBAL VARIABLES */
int server = 0; /* are we a server or a client? */
@@ -201,6 +202,9 @@
cl->ping_counter = 0;
if (pl != NULL && cl->tun_fd != -1) {
+ if (!server) /* client */
+ send_plugin_select(cl);
+
if (cl->pl->is_ready_to_send(cl->pl, cl->clid) ==
WILL_SEND_IMMEDIATELY)
event_add(&cl->tun_ev, NULL);
@@ -423,6 +427,36 @@
}
/*
+ * send a message to the server notifying it of plugin failover
+ */
+static void
+send_plugin_select(struct client *cl)
+{
+ int nwrite = 0;
+ char data[10];
+ char *datap = data;
+ int len=0;
+ int consumed;
+
+
+ if (cl->pl != NULL) {
+ /* client prepends the client ID */
+ if (!server) {
+ *datap = cl->clid;
+ datap++;
+ len++;
+ }
+
+ *datap = DISPATCH_PLUGIN_SELECT;
+ datap++;
+ len++;
+
+ nwrite = cl->pl->send(cl->pl, cl->clid,
+ data, len, NORMAL_DATA, &consumed);
+ printf("send_plugin_select(): nwrite: 0x%x\n", nwrite);
+ }
+}
+/*
* Send a tunnel probe - echo request. Note that this is different
* from ICMP echo.
*/
@@ -617,6 +651,23 @@
break;
+ case DISPATCH_PLUGIN_SELECT:
+ printf("process_data_from_plugin(): PLUGIN_SELECT\n");
+ /* only associated clients can send DATA to the server */
+ if (server && *clid == 0) {
+ *conn_flag = CONN_DISCARD;
+ pl->conn_map(pl, *clid, *conn_flag);
+ return;
+ }
+
+ *conn_flag = CONN_PERM;
+ pl->conn_map(pl, *clid, CONN_PERM);
+
+ /* update the current plugin for this client */
+ set_client_pl(cl, pl);
+
+ break;
+
case DISPATCH_FRAG: /* fragment reassembly */
pl->conn_map(pl, *clid, CONN_PERM);
@@ -1203,8 +1254,10 @@
signal(SIGTERM, sigcb);
/* load the plugins */
-/* pl = load_plugin("./plugin_udp.so"); */
-/* pl->name = "udp_1234"; */
+ pl = load_plugin("./plugin_udp.so");
+ pl->name = "udp_1234";
+ pl = load_plugin("./plugin_udp.so");
+ pl->name = "udp_1235";
/* if (server) { */
/* pl = load_plugin("./plugin_udp_catchall.so"); */
/* pl->name = "udp_catchall"; */
@@ -1212,10 +1265,10 @@
/* pl = load_plugin("./plugin_udp.so"); */
/* pl->name = "udp_53"; */
/* } */
-/* pl = load_plugin("./plugin_tcp.so"); */
-/* pl->name = "tcp_1234"; */
-/* pl = load_plugin("./plugin_icmp.so"); */
-/* pl->name = "icmp"; */
+ pl = load_plugin("./plugin_tcp.so");
+ pl->name = "tcp_1234";
+ pl = load_plugin("./plugin_icmp.so");
+ pl->name = "icmp";
pl = load_plugin("./plugin_dns/plugin_dns.so");
pl->name = "dns_53";
==== //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.h#5 (text+ko) ====
@@ -79,16 +79,14 @@
/* dispatch type - prepended before the payload */
enum {
- DISPATCH_ECHO_REQUEST = 1,
- DISPATCH_ECHO_REPLY = 2,
- DISPATCH_FRAG = 3,
+ DISPATCH_ECHO_REQUEST,
+ DISPATCH_ECHO_REPLY,
+ DISPATCH_PLUGIN_SELECT,
+ DISPATCH_FRAG,
DISPATCH_ID_REQUEST, /* client requesting an ID */
DISPATCH_ID_OFFER, /* daemon offering an ID to the client */
- //DISPATCH_ID_CANCEL, /* client ending a session */
DISPATCH_PLUGIN_DATA, /* plugin to plugin communication */
DISPATCH_DATA = 0x42,
- DIPATCH_PLUGIN_RESERVED_MIN = 128, /* dispatch values used by plugins, */
- DIPATCH_PLUGIN_RESERVED_MAX = 255, /* i.e., not passed to the daemon */
};
/*
More information about the p4-projects
mailing list