Date: Mon, 20 Aug 2007 12:38:29 GMT From: Matus Harvan <mharvan@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 125402 for review Message-ID: <200708201238.l7KCcTHh058221@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=125402 Change 125402 by mharvan@mharvan_bike-planet on 2007/08/20 12:38:13 plugin_send() reports the number of bytes consumed - used in the DNS plugin Affected files ... .. //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.c#9 edit .. //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.h#4 edit .. //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin.h#8 edit .. //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_dns/plugin_dns.c#2 edit .. //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_icmp.c#11 edit .. //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_tcp.c#15 edit .. //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_udp.c#11 edit .. //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_udp_catchall.c#4 edit Differences ... ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.c#9 (text+ko) ==== @@ -433,6 +433,7 @@ char data[10]; char *datap = data; int len=0; + int consumed; cl->ping_counter++; @@ -453,7 +454,7 @@ len++; nwrite = cl->pl->send(cl->pl, cl->clid, - data, len, NORMAL_DATA); + data, len, NORMAL_DATA, &consumed); printf("send_echo_request(): nwrite: 0x%x\n", nwrite); } } @@ -468,6 +469,8 @@ int nwrite = 0; char data[10]; char *pdata = data; + int consumed; + if (cl->pl != NULL) { /* client ID */ *pdata = 0; @@ -482,7 +485,8 @@ pdata += sizeof(cl->reqid); nwrite = cl->pl->send(cl->pl, cl->clid, - data, pdata - data, NORMAL_DATA); + data, pdata - data, NORMAL_DATA, + &consumed); //pl->ping_counter--; printf("send_id_request(): nwrite: 0x%x\n", nwrite); } @@ -557,6 +561,7 @@ u_int8_t dispatch; int i; int nwrite; + int consumed; struct client *cl = NULL; /* fragment reassembly */ @@ -750,7 +755,7 @@ *data = myclid; } - nwrite = pl->send(pl, 0, data, len, URGENT_DATA); + nwrite = pl->send(pl, 0, data, len, URGENT_DATA, &consumed); printf("sending reply, returned 0x%x\n", nwrite); if (server) { @@ -819,7 +824,7 @@ *(data) = DISPATCH_ID_OFFER; *(data+1) = *clid; - nwrite = pl->send(pl, *clid, data, 2, URGENT_DATA); + nwrite = pl->send(pl, *clid, data, 2, URGENT_DATA, &consumed); fprintf(stderr, "got ID request (plugin: %s)\n", pl->name); printf("sending an offer, returned 0x%x\n", nwrite); @@ -868,6 +873,7 @@ process_data_from_tun(struct client *cl, struct plugin *pl, uint8_t dispatch, char *data, int len) { + int consumed; char ldata[MTU+3]; if (pl == NULL) @@ -887,13 +893,15 @@ *(ldata) = dispatch; memcpy(ldata + 1, data, min(sizeof(ldata)-1, len)); return (pl->send(pl, cl->clid, ldata, - min(sizeof(ldata), len + 1), NORMAL_DATA)); + min(sizeof(ldata), len + 1), NORMAL_DATA, + &consumed)); } else { /* client */ *ldata = myclid; *(ldata + 1) = dispatch; memcpy(ldata+2, data, min(sizeof(ldata)-2, len)); return (pl->send(pl, myclid, ldata, - min(sizeof(ldata), len + 2), NORMAL_DATA)); + min(sizeof(ldata), len + 2), NORMAL_DATA, + &consumed)); } /* add the fragmentation header */ } else { @@ -935,6 +943,7 @@ send_next_frag(struct client *cl) { int nwrite = SEND_PKT_SENT; + int consumed; int n; if (server) { @@ -955,16 +964,20 @@ /* send it */ //TODO: maybe we should check how much data // was actually sent - n = min(cl->pl->mtu, cl->frag_data_len); + if (cl->pl->mtu > 0) + n = min(cl->pl->mtu, cl->frag_data_len); + else + n = cl->frag_data_len; nwrite = cl->pl->send(cl->pl, cl->clid, - cl->frag_datap, n, NORMAL_DATA); + cl->frag_datap, n, NORMAL_DATA, &consumed); + printf("send_next_frag: consumed: %d\n", consumed); switch (nwrite) { case SEND_PKT_SENT: case SEND_PKT_QUEUED: - n -= sizeof(cl->frag_hdr); - cl->frag_datap += n; - cl->frag_hdr.offset += n; - cl->frag_data_len -= n; + consumed -= sizeof(cl->frag_hdr); + cl->frag_datap += consumed; + cl->frag_hdr.offset += consumed; + cl->frag_data_len -= consumed; break; default: //plugin_report(current_pl, REPORT_ERROR_SEND); @@ -994,16 +1007,19 @@ /* send it */ //TODO: maybe we should check how much data // was actually sent - n = min(cl->pl->mtu, cl->frag_data_len); + if (cl->pl->mtu > 0) + n = min(cl->pl->mtu, cl->frag_data_len); + else + n = cl->frag_data_len; nwrite = cl->pl->send(cl->pl, cl->clid, - cl->frag_datap, n, NORMAL_DATA); + cl->frag_datap, n, NORMAL_DATA, &consumed); switch (nwrite) { case SEND_PKT_SENT: case SEND_PKT_QUEUED: - n -= sizeof(cl->frag_hdr) + 1; - cl->frag_datap += n; - cl->frag_hdr.offset += n; - cl->frag_data_len -= n; + consumed -= sizeof(cl->frag_hdr) + 1; + cl->frag_datap += consumed; + cl->frag_hdr.offset += consumed; + cl->frag_data_len -= consumed; break; default: //plugin_report(current_pl, REPORT_ERROR_SEND); @@ -1187,6 +1203,8 @@ signal(SIGTERM, sigcb); /* load the plugins */ +/* pl = load_plugin("./plugin_udp.so"); */ +/* pl->name = "udp_1234"; */ /* if (server) { */ /* pl = load_plugin("./plugin_udp_catchall.so"); */ /* pl->name = "udp_catchall"; */ ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/mtund.h#4 (text+ko) ==== @@ -28,7 +28,7 @@ int (*initialize)(struct plugin*, int, char*, char*); void (*deinitialize)(struct plugin*); void (*receive)(int fd, short ev_type, void *arg); /* select fired on some fd - check for data */ - int (*send)(struct plugin*, uint8_t, char*, int, int); + int (*send)(struct plugin*, uint8_t, char*, int, int, int*); int (*is_ready_to_send)(struct plugin*, uint8_t); void (*conn_close)(struct plugin*, uint8_t); void (*conn_map)(struct plugin*, uint8_t, int); ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin.h#8 (text+ko) ==== @@ -79,10 +79,10 @@ /* * Send the data. - * Return: number of bytes sent, -1 on error. + * consumed: number of bytes sent */ int plugin_send(struct plugin *pl, uint8_t clid, - char *data, int len, int data_type); + char *data, int len, int data_type, int *consumed); /* * Data for the plugin from plugin to plugin communication. ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_dns/plugin_dns.c#2 (text+ko) ==== @@ -224,6 +224,7 @@ /* the client has to reset the timer for keep-alive requests */ register_timer_ev(&pldata->timer_ev); + printf("dns_send(): consumed: %d\n", consumed); return consumed; } } @@ -255,8 +256,11 @@ plugin_register(struct plugin* pl) { pl->name = "dns"; - //pl->mtu = 1024; - pl->mtu = 512; + if (server) + //pl->mtu = 1024; + pl->mtu = 512; + else + pl->mtu = 0; pl->initialize = plugin_initialize; pl->deinitialize = plugin_deinitialize; pl->is_ready_to_send = plugin_is_ready_to_send; @@ -312,8 +316,6 @@ struct plugin_dns_data *data = (struct plugin_dns_data*) pl->data; int fd_flags; - fprintf(stderr, "starting plugin_initialize...\n"); - conn_init(data->conns); data->conn = data->conns; if (server) { @@ -586,10 +588,10 @@ } int -plugin_send(struct plugin *pl, clientid_t clid, char *data, int len, int data_type) +plugin_send(struct plugin *pl, clientid_t clid, + char *data, int len, int data_type, int *consumed) { struct plugin_dns_data *pldata = pl->data; - int n = 0; char **queued_data; int *queued_data_len; struct conn *conn; @@ -620,8 +622,10 @@ } memcpy(*queued_data, data, len); *queued_data_len = len; + *consumed = len; return SEND_PKT_QUEUED; } else { + *consumed = 0; return SEND_ERROR_QUEUE_FULL; } @@ -631,8 +635,8 @@ } } else { /* client - send the data straight away */ - n = dns_send(pldata, pldata->conns, data, len); - if (n > 0) { + *consumed = dns_send(pldata, pldata->conns, data, len); + if (*consumed > 0) { conn->data_sent_after_last_receive = 1; return SEND_PKT_SENT; } else ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_icmp.c#11 (text+ko) ==== @@ -37,7 +37,7 @@ * how often should an empty request be sent to the server - This is * useful when the server has data to send but the client doesn't. */ -#define PLUGIN_ICMP_KEEP_ALIVE 2 +#define PLUGIN_ICMP_KEEP_ALIVE 1 struct conn { clientid_t clid; @@ -215,7 +215,6 @@ int fd_flags; struct plugin_icmp_data *data = (struct plugin_icmp_data*) pl->data; - fprintf(stderr, "starting plugin_initialize...\n"); conn_init(data->conns); data->conn = data->conns; @@ -567,7 +566,8 @@ } int -plugin_send(struct plugin *pl, clientid_t clid, char *data, int len, int data_type) +plugin_send(struct plugin *pl, clientid_t clid, + char *data, int len, int data_type, int *consumed) { struct plugin_icmp_data *pldata = pl->data; int n = 0; @@ -606,8 +606,10 @@ } memcpy(*queued_data, data, len); *queued_data_len = len; + *consumed = len; return SEND_PKT_QUEUED; } else { + *consumed = 0; return SEND_ERROR_QUEUE_FULL; } @@ -620,9 +622,11 @@ n = send_icmp_pkt(pl, pldata->conns, data, len); fprintf(stderr, "send_icmp_pkt: send returned %d\n", n); if (n > 0) { + *consumed = n; conn->data_sent_after_last_receive = 1; return SEND_PKT_SENT; } else + *consumed = 0; return SEND_ERROR; } } ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_tcp.c#15 (text+ko) ==== @@ -512,7 +512,7 @@ */ int plugin_send(struct plugin *pl, uint8_t clid, - char *data, int len, int data_type) + char *data, int len, int data_type, int* consumed) { struct plugin_tcp_data *pldata = (struct plugin_tcp_data*) pl->data; int n = 0; @@ -548,9 +548,11 @@ n = write(conn->fd, ldata, sizeof(l) + l); free(ldata); - if (n < 0) + if (n < 0) { + *consumed = 0; warn("plugin_tcp: write failed"); - + } else + *consumed = n; if (n < 0 || (l != 0 && n == 0) ) { plugin_report(pl, clid, REPORT_ERROR_SEND); return SEND_ERROR; ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_udp.c#11 (text+ko) ==== @@ -162,7 +162,7 @@ int plugin_register(struct plugin* pl) { pl->name = "udp"; - pl->mtu = 145; + pl->mtu = 1400; pl->initialize = plugin_initialize; pl->deinitialize = plugin_deinitialize; pl->is_ready_to_send = plugin_is_ready_to_send; @@ -203,7 +203,7 @@ { //int n = 0; struct plugin_udp_data *data = (struct plugin_udp_data*)pl->data; - fprintf(stderr, "starting plugin_initialize...\n"); + if (server == 1) { data->fd = udp_open(port); if (data->fd != -1) @@ -306,7 +306,7 @@ int plugin_send(struct plugin *pl, uint8_t clid, - char *data, int len, int data_type) + char *data, int len, int data_type, int* consumed) { struct plugin_udp_data *datapl = (struct plugin_udp_data*) pl->data; int nwrite = 0; @@ -317,9 +317,10 @@ nwrite = sendto(datapl->fd, data, len, 0, (struct sockaddr*)&conn->addr, conn->addrlen); - if (nwrite == len) + if (nwrite == len) { + *consumed = nwrite; return (SEND_PKT_SENT); - else { + } else { warn("plugin_send: send returned %d", nwrite); return (SEND_ERROR); } @@ -329,6 +330,7 @@ "discarding data\n"); return (SEND_ERROR); } else { + *consumed = nwrite; nwrite = send(datapl->fd, data, len, 0); fprintf(stderr, "plugin_send: send returned %d\n", nwrite); ==== //depot/projects/soc2007/mharvan-mtund/mtund.src/plugin_udp_catchall.c#4 (text+ko) ==== @@ -443,7 +443,7 @@ int plugin_send(struct plugin *pl, uint8_t clid, - char *data, int len, int data_type) + char *data, int len, int data_type, int* consumed) { struct plugin_udpall_data *pldata = pl->data; struct conn *conn ; @@ -458,6 +458,11 @@ /* send the data */ nwrite = send(conn->fd, data, len, 0); + if (nwrite >= 0) + *consumed = nwrite; + else + *consumed = 0; + /* error checking */ if (nwrite == len) return (SEND_PKT_SENT);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200708201238.l7KCcTHh058221>