X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=lib%2Fvconn.c;h=d1b8353b2cf319a2f39a93cb2ad66fe15404ccd4;hb=5422a9e189c627202a0eaa568a52d17e088d82fb;hp=f493f8337769971ff81f8686193f2a6cd8f3a420;hpb=d7cca8671055c79b1938de9731fb53ae6c32dc87;p=openvswitch diff --git a/lib/vconn.c b/lib/vconn.c index f493f833..d1b8353b 100644 --- a/lib/vconn.c +++ b/lib/vconn.c @@ -128,11 +128,11 @@ vconn_usage(bool active, bool passive, bool bootstrap UNUSED) printf("\n"); if (active) { printf("Active OpenFlow connection methods:\n"); - printf(" tcp:HOST[:PORT] " - "PORT (default: %d) on remote TCP HOST\n", OFP_TCP_PORT); + printf(" tcp:IP[:PORT] " + "PORT (default: %d) at remote IP\n", OFP_TCP_PORT); #ifdef HAVE_OPENSSL - printf(" ssl:HOST[:PORT] " - "SSL PORT (default: %d) on remote HOST\n", OFP_SSL_PORT); + printf(" ssl:IP[:PORT] " + "SSL PORT (default: %d) at remote IP\n", OFP_SSL_PORT); #endif printf(" unix:FILE Unix domain socket named FILE\n"); } @@ -928,6 +928,28 @@ make_add_simple_flow(const flow_t *flow, return buffer; } +struct ofpbuf * +make_packet_in(uint32_t buffer_id, uint16_t in_port, uint8_t reason, + const struct ofpbuf *payload, int max_send_len) +{ + struct ofp_packet_in *opi; + struct ofpbuf *buf; + int send_len; + + send_len = MIN(max_send_len, payload->size); + buf = ofpbuf_new(sizeof *opi + send_len); + opi = put_openflow_xid(offsetof(struct ofp_packet_in, data), + OFPT_PACKET_IN, 0, buf); + opi->buffer_id = htonl(buffer_id); + opi->total_len = htons(payload->size); + opi->in_port = htons(in_port); + opi->reason = reason; + ofpbuf_put(buf, payload->data, send_len); + update_openflow_length(buf); + + return buf; +} + struct ofpbuf * make_packet_out(const struct ofpbuf *packet, uint32_t buffer_id, uint16_t in_port, @@ -1247,7 +1269,7 @@ check_action(const union ofp_action *a, unsigned int len, int max_ports) { int error; - switch (a->type) { + switch (ntohs(a->type)) { case OFPAT_OUTPUT: error = check_action_port(ntohs(a->output.port), max_ports); if (error) {