Improve secchan.8 manpage.
[sliver-openvswitch.git] / datapath / datapath.c
index bca1bdc..6b7f645 100644 (file)
@@ -265,7 +265,6 @@ static int new_dp(int dp_idx)
                goto err_free_dp;
 
        dp->dp_idx = dp_idx;
-       dp->id = get_datapath_id(dp->netdev);
        dp->chain = chain_create(dp);
        if (dp->chain == NULL)
                goto err_destroy_dp_dev;
@@ -466,7 +465,6 @@ do_port_input(struct net_bridge_port *p, struct sk_buff *skb)
 #ifdef SUPPORT_SNAT
        /* Check if this packet needs early SNAT processing. */
        if (snat_pre_route(skb)) {
-               kfree_skb(skb);
                return;
        }
 #endif
@@ -806,9 +804,10 @@ static int
 fill_features_reply(struct datapath *dp, struct ofp_switch_features *ofr)
 {
        struct net_bridge_port *p;
+       uint64_t dpid = get_datapath_id(dp->netdev);
        int port_count = 0;
 
-       ofr->datapath_id  = cpu_to_be64(dp->id); 
+       ofr->datapath_id  = cpu_to_be64(dpid);
 
        ofr->n_buffers    = htonl(N_PKT_BUFFERS);
        ofr->n_tables     = dp->chain->n_tables;
@@ -1115,7 +1114,7 @@ static int dp_genl_del(struct sk_buff *skb, struct genl_info *info)
        if (!info->attrs[DP_GENL_A_DP_IDX])
                return -EINVAL;
 
-       dp = dp_get(nla_get_u32((info->attrs[DP_GENL_A_DP_IDX])));
+       dp = dp_get(nla_get_u32(info->attrs[DP_GENL_A_DP_IDX]));
        if (!dp)
                err = -ENOENT;
        else {
@@ -1383,8 +1382,8 @@ static int flow_stats_dump(struct datapath *dp, void *state,
        {
                struct sw_table *table = dp->chain->tables[s->table_idx];
 
-               error = table->iterate(table, &match_key, &s->position,
-                                      flow_stats_dump_callback, s);
+               error = table->iterate(table, &match_key, s->rq->out_port, 
+                               &s->position, flow_stats_dump_callback, s);
                if (error)
                        break;
 
@@ -1448,7 +1447,7 @@ static int aggregate_stats_dump(struct datapath *dp, void *state,
                struct sw_table *table = dp->chain->tables[table_idx];
                int error;
 
-               error = table->iterate(table, &match_key, &position,
+               error = table->iterate(table, &match_key, rq->out_port, &position,
                                       aggregate_stats_dump_callback, rpy);
                if (error)
                        return error;