X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ofproto%2Fpktbuf.c;h=aa90295427b91808bfbdbe29a22dfc09aa1784f0;hb=f1670a487adf5d5352eaf32f15bcf2958cdb1771;hp=c103c7ffb0715f8478d4480de914406ffc0de472;hpb=a0bc29a541fc7dc6e20137d5558e2094d614e6ab;p=openvswitch diff --git a/ofproto/pktbuf.c b/ofproto/pktbuf.c index c103c7ff..aa902954 100644 --- a/ofproto/pktbuf.c +++ b/ofproto/pktbuf.c @@ -19,14 +19,15 @@ #include #include #include "coverage.h" +#include "ofp-util.h" #include "ofpbuf.h" #include "timeval.h" #include "util.h" #include "vconn.h" - -#define THIS_MODULE VLM_pktbuf #include "vlog.h" +VLOG_DEFINE_THIS_MODULE(pktbuf) + /* Buffers are identified by a 32-bit opaque ID. We divide the ID * into a buffer number (low bits) and a cookie (high bits). The buffer number * is an index into an array of buffers. The cookie distinguishes between @@ -111,7 +112,9 @@ pktbuf_save(struct pktbuf *pb, struct ofpbuf *buffer, uint16_t in_port) if (++p->cookie >= COOKIE_MAX) { p->cookie = 0; } - p->buffer = ofpbuf_clone(buffer); + p->buffer = ofpbuf_new_with_headroom(buffer->size, + sizeof(struct ofp_packet_in)); + ofpbuf_put(p->buffer, buffer->data, buffer->size); p->timeout = time_msec() + OVERWRITE_MSECS; p->in_port = in_port; return make_id(p - pb->packets, p->cookie); @@ -153,6 +156,9 @@ pktbuf_get_null(void) * identifies a "null" packet buffer (created with pktbuf_get_null()), stores * NULL in '*bufferp' and UINT16_max in '*in_port'. * + * A returned packet will have at least sizeof(struct ofp_packet_in) bytes of + * headroom. + * * On failure, stores NULL in in '*bufferp' and UINT16_MAX in '*in_port'. */ int pktbuf_retrieve(struct pktbuf *pb, uint32_t id, struct ofpbuf **bufferp,