Hi Ethan,

On 09/06/2011 10:32 PM, Ethan Jackson wrote:
> Before this patch, ofproto-dpif would not forward any LACP or CFM
> packets regardless of whether or not the relevant modules were
> configured on the in_port.
> 
> Feature #6316.
> ---
>  ofproto/ofproto-dpif.c |   19 ++++++++++++-------
>  1 files changed, 12 insertions(+), 7 deletions(-)
> 
> diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c
> index 478768f..4253202 100644
> --- a/ofproto/ofproto-dpif.c
> +++ b/ofproto/ofproto-dpif.c
> @@ -1614,16 +1614,21 @@ static bool
>  process_special(struct ofproto_dpif *ofproto, const struct flow *flow,
>                  const struct ofpbuf *packet)
>  {
> -    if (cfm_should_process_flow(flow)) {
> -        struct ofport_dpif *ofport = get_ofp_port(ofproto, flow->in_port);
> -        if (packet && ofport && ofport->cfm) {
> +    struct ofport_dpif *ofport = get_ofp_port(ofproto, flow->in_port);
> +
> +    if (!ofport) {
> +        return false;
> +    }
> +
> +    if (ofport->cfm && cfm_should_process_flow(flow)) {
> +        if (packet) {
>              cfm_process_heartbeat(ofport->cfm, packet);
>          }
>          return true;
> -    } else if (flow->dl_type == htons(ETH_TYPE_LACP)) {
> -        struct ofport_dpif *port = get_ofp_port(ofproto, flow->in_port);
> -        if (packet && port && port->bundle && port->bundle->lacp) {
> -            lacp_process_packet(port->bundle->lacp, port, packet);
> +    } else if (ofport && ofport->bundle && ofport->bundle->lacp
> +               && flow->dl_type == htons(ETH_TYPE_LACP)) {
> +        if (packet) {
> +            lacp_process_packet(ofport->bundle->lacp, ofport, packet);
>          }
>          return true;
>      }

You already checked that 'ofport' is valid above, so you don't need to check it
again in this 'else' case before de-referencing it, right?

-Brian
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to