Merge remote-tracking branch 'ovs-dev/master'
authorGiuseppe Lettieri <g.lettieri@iet.unipi.it>
Wed, 31 Jul 2013 20:17:34 +0000 (22:17 +0200)
committerGiuseppe Lettieri <g.lettieri@iet.unipi.it>
Wed, 31 Jul 2013 20:17:34 +0000 (22:17 +0200)
Conflicts:
.gitignore

1  2 
.gitignore
lib/dpif-netdev.c
lib/dpif.c
lib/netdev.c

diff --cc .gitignore
@@@ -49,4 -49,4 +49,5 @@@ Module.symver
  TAGS
  cscope.*
  tags
 +myexp/
+ _debian
@@@ -1201,51 -1291,78 +1299,86 @@@ dp_netdev_execute_actions(struct dp_net
                          dp_netdev_output_port, dp_netdev_action_userspace);
  }
  
 +#define DPIF_NETDEV_CLASS_FUNCTIONS                   \
 +    dpif_netdev_enumerate,                            \
 +    dpif_netdev_port_open_type,                               \
 +    dpif_netdev_open,                                 \
 +    dpif_netdev_close,                                        \
 +    dpif_netdev_destroy,                              \
 +    dpif_netdev_run,                                  \
 +    dpif_netdev_wait,                                 \
 +    dpif_netdev_get_stats,                            \
 +    dpif_netdev_port_add,                             \
 +    dpif_netdev_port_del,                             \
 +    dpif_netdev_port_query_by_number,                 \
 +    dpif_netdev_port_query_by_name,                   \
 +    dpif_netdev_get_max_ports,                                \
 +    NULL,                       /* port_get_pid */    \
 +    dpif_netdev_port_dump_start,                      \
 +    dpif_netdev_port_dump_next,                               \
 +    dpif_netdev_port_dump_done,                               \
 +    dpif_netdev_port_poll,                            \
 +    dpif_netdev_port_poll_wait,                               \
 +    dpif_netdev_flow_get,                             \
 +    dpif_netdev_flow_put,                             \
 +    dpif_netdev_flow_del,                             \
 +    dpif_netdev_flow_flush,                           \
 +    dpif_netdev_flow_dump_start,                      \
 +    dpif_netdev_flow_dump_next,                               \
 +    dpif_netdev_flow_dump_done,                               \
 +    dpif_netdev_execute,                              \
 +    NULL,                       /* operate */         \
 +    dpif_netdev_recv_set,                             \
 +    dpif_netdev_queue_to_priority,                    \
 +    dpif_netdev_recv,                                 \
 +    dpif_netdev_recv_wait,                            \
 +    dpif_netdev_recv_purge,                           \
 +
  const struct dpif_class dpif_netdev_class = {
      "netdev",
 -    dpif_netdev_enumerate,
 -    dpif_netdev_port_open_type,
 -    dpif_netdev_open,
 -    dpif_netdev_close,
 -    dpif_netdev_destroy,
 -    dpif_netdev_run,
 -    dpif_netdev_wait,
 -    dpif_netdev_get_stats,
 -    dpif_netdev_port_add,
 -    dpif_netdev_port_del,
 -    dpif_netdev_port_query_by_number,
 -    dpif_netdev_port_query_by_name,
 -    dpif_netdev_get_max_ports,
 -    NULL,                       /* port_get_pid */
 -    dpif_netdev_port_dump_start,
 -    dpif_netdev_port_dump_next,
 -    dpif_netdev_port_dump_done,
 -    dpif_netdev_port_poll,
 -    dpif_netdev_port_poll_wait,
 -    dpif_netdev_flow_get,
 -    dpif_netdev_flow_put,
 -    dpif_netdev_flow_del,
 -    dpif_netdev_flow_flush,
 -    dpif_netdev_flow_dump_start,
 -    dpif_netdev_flow_dump_next,
 -    dpif_netdev_flow_dump_done,
 -    dpif_netdev_execute,
 -    NULL,                       /* operate */
 -    dpif_netdev_recv_set,
 -    dpif_netdev_queue_to_priority,
 -    dpif_netdev_recv,
 -    dpif_netdev_recv_wait,
 -    dpif_netdev_recv_purge,
 +    DPIF_NETDEV_CLASS_FUNCTIONS
 +};
 +
 +const struct dpif_class dpif_planetlab_class = {
 +    "planetlab",
 +    DPIF_NETDEV_CLASS_FUNCTIONS
  };
  
+ static void
+ dpif_dummy_change_port_number(struct unixctl_conn *conn, int argc OVS_UNUSED,
+                               const char *argv[], void *aux OVS_UNUSED)
+ {
+     struct dp_netdev_port *port;
+     struct dp_netdev *dp;
+     int port_no;
+     dp = shash_find_data(&dp_netdevs, argv[1]);
+     if (!dp || !dpif_netdev_class_is_dummy(dp->class)) {
+         unixctl_command_reply_error(conn, "unknown datapath or not a dummy");
+         return;
+     }
+     if (get_port_by_name(dp, argv[2], &port)) {
+         unixctl_command_reply_error(conn, "unknown port");
+         return;
+     }
+     port_no = atoi(argv[3]);
+     if (port_no <= 0 || port_no >= MAX_PORTS) {
+         unixctl_command_reply_error(conn, "bad port number");
+         return;
+     }
+     if (dp->ports[port_no]) {
+         unixctl_command_reply_error(conn, "port number already in use");
+         return;
+     }
+     dp->ports[odp_to_u32(port->port_no)] = NULL;
+     dp->ports[port_no] = port;
+     port->port_no = u32_to_odp(port_no);
+     dp->serial++;
+     unixctl_command_reply(conn, NULL);
+ }
  static void
  dpif_dummy_register__(const char *type)
  {
@@@ -1275,5 -1392,8 +1408,9 @@@ dpif_dummy_register(bool override
      }
  
      dpif_dummy_register__("dummy");
+     unixctl_command_register("dpif-dummy/change-port-number",
+                              "DP PORT NEW-NUMBER",
+                              3, 3, dpif_dummy_change_port_number, NULL);
  }
 +
diff --cc lib/dpif.c
Simple merge
diff --cc lib/netdev.c
Simple merge