X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ofproto%2Fpktbuf.c;h=fc4c66ca102e48e2dad99c71ac32d83ac4665a09;hb=db968317f3ab4c44dedd9a125333edaed1924de2;hp=b8698021d35ed1318c0ae9563a399329ffaf4e34;hpb=d76f09ea77e03ee5a3a7bb67bcab1ac4bb54172b;p=openvswitch diff --git a/ofproto/pktbuf.c b/ofproto/pktbuf.c index b8698021..fc4c66ca 100644 --- a/ofproto/pktbuf.c +++ b/ofproto/pktbuf.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009, 2010 Nicira Networks. + * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -161,6 +161,8 @@ pktbuf_get_null(void) * identifies a "null" packet buffer (created with pktbuf_get_null()), stores * NULL in '*bufferp' and UINT16_max in '*in_port'. * + * 'in_port' may be NULL if the input port is not of interest. + * * A returned packet will have at least sizeof(struct ofp_packet_in) bytes of * headroom. * @@ -173,6 +175,11 @@ pktbuf_retrieve(struct pktbuf *pb, uint32_t id, struct ofpbuf **bufferp, struct packet *p; int error; + if (id == UINT32_MAX) { + error = 0; + goto error; + } + if (!pb) { VLOG_WARN_RL(&rl, "attempt to send buffered packet via connection " "without buffers"); @@ -184,7 +191,9 @@ pktbuf_retrieve(struct pktbuf *pb, uint32_t id, struct ofpbuf **bufferp, struct ofpbuf *buffer = p->buffer; if (buffer) { *bufferp = buffer; - *in_port = p->in_port; + if (in_port) { + *in_port = p->in_port; + } p->buffer = NULL; COVERAGE_INC(pktbuf_retrieved); return 0; @@ -204,8 +213,11 @@ pktbuf_retrieve(struct pktbuf *pb, uint32_t id, struct ofpbuf **bufferp, "if the switch was recently in fail-open mode)", id); error = 0; } +error: *bufferp = NULL; - *in_port = UINT16_MAX; + if (in_port) { + *in_port = UINT16_MAX; + } return error; }