Hi Romain,

I will pulling out your patch on the binding address since it breaks
ptcp:[port].  You need to do some checking of the number of
commandline arguments.  Sorry I do not have time to fix it for now, so
to make sure people can move on, I pulled this out for now.

Will try to patch this later.

Thanks for the heads up nonetheless.

Regards
KK

On 9 August 2010 17:47, kk yap <yap...@stanford.edu> wrote:
> Hi All,
>
> I have pushed both Romain's patches (to branches:openflow-1.0 and
> destiny) with matching changes to the usage printout.  FYI.
>
> Thanks Romain for the patches.
>
> Regards
> KK
>
> PS>> For those submitting patches, it might help to tar/zip the
> patches 'cos some email system (e.g. web-based Gmail) corrupts the
> patch through line-wrapping.  Thanks.
>
> On 5 August 2010 20:25, Romain Lenglet <romain.leng...@berabera.info> wrote:
>> This patch is based on the openflow-1.0 branch.
>>
>> On 8/6/10 12:24, romain.leng...@berabera.info wrote:
>>>
>>> From: Romain Lenglet<romain.leng...@berabera.info>
>>>
>>> Modify the nox_core command line arguments to accept the socket bind
>>> address for the ptcp: and pssl: connection methods. This is
>>> particularly important for the ptcp: method, as it can help improving
>>> security and performance in some cases. For instance, if a controller
>>> connects only to datapaths on the same host, using ptcp: and binding
>>> to 127.0.0.1 limits to connections from the localhost. Otherwise,
>>> pssl: must be used, which is less efficient.
>>> ---
>>>  src/include/openflow.hh |    8 ++++++--
>>>  src/lib/openflow.cc     |   42 +++++++++++++++++++++++++++++-------------
>>>  2 files changed, 35 insertions(+), 15 deletions(-)
>>>
>>> diff --git a/src/include/openflow.hh b/src/include/openflow.hh
>>> index 02e6f9f..5248bbb 100644
>>> --- a/src/include/openflow.hh
>>> +++ b/src/include/openflow.hh
>>> @@ -284,13 +284,15 @@ class Passive_tcp_openflow_connection_factory
>>>      : public Openflow_connection_factory
>>>  {
>>>  public:
>>> -    Passive_tcp_openflow_connection_factory(uint16_t port);
>>> +    Passive_tcp_openflow_connection_factory(const char* bind_ip,
>>> +                                            uint16_t port);
>>>      Openflow_connection* connect(int&  error);
>>>      void connect_wait();
>>>      std::string to_string();
>>>      bool passive() { return true; }
>>>  private:
>>>      Tcp_socket socket;
>>> +    ipaddr bind_ip;
>>>      uint16_t port;
>>>  };
>>>
>>> @@ -314,7 +316,8 @@ class Passive_ssl_openflow_connection_factory
>>>      : public Openflow_connection_factory
>>>  {
>>>  public:
>>> -    Passive_ssl_openflow_connection_factory(uint16_t port, const char
>>> *key,
>>> +    Passive_ssl_openflow_connection_factory(const char* bind_ip,
>>> +                                            uint16_t port, const char
>>> *key,
>>>                                              const char *cert,
>>>                                              const char *CAfile);
>>>      Openflow_connection* connect(int&  error);
>>> @@ -324,6 +327,7 @@ public:
>>>  private:
>>>      boost::shared_ptr<Ssl_config>  config;
>>>      Ssl_socket socket;
>>> +    ipaddr bind_ip;
>>>      uint16_t port;
>>>  };
>>>
>>> diff --git a/src/lib/openflow.cc b/src/lib/openflow.cc
>>> index 95251bb..0ebc1d0 100644
>>> --- a/src/lib/openflow.cc
>>> +++ b/src/lib/openflow.cc
>>> @@ -1133,11 +1133,20 @@ Openflow_connection_factory*
>>> Openflow_connection_factory::create(
>>>                  ? atoi(tokens[2].c_str()) : OFP_TCP_PORT;
>>>          return new Tcp_openflow_connection_factory(tokens[1],
>>> htons(port));
>>>      } else if (tokens[0] == "ptcp") {
>>> -        uint16_t port = atoi(tokens[1].c_str());
>>> +        if (tokens.size() != 3) {
>>> +            log.err("pssl connection name not in the form
>>> ptcp:[IP]:[PORT]");
>>> +            exit(EXIT_FAILURE);
>>> +        }
>>> +        const char* bind_ip = "0.0.0.0";
>>> +        if (tokens[1].size()>  0) {
>>> +          bind_ip = tokens[1].c_str();
>>> +        }
>>> +        uint16_t port = atoi(tokens[2].c_str());
>>>          if (!port) {
>>>              port = OFP_TCP_PORT;
>>>          }
>>> -        return new Passive_tcp_openflow_connection_factory(htons(port));
>>> +        return new Passive_tcp_openflow_connection_factory(bind_ip,
>>> +                                                           htons(port));
>>>      } else if (tokens[0] == "ssl") {
>>>          if (tokens.size() != 6) {
>>>              log.err("ssl connection name not in the form
>>> ssl:HOST:[PORT]:KEY:CERT:CAFILE");
>>> @@ -1151,17 +1160,21 @@ Openflow_connection_factory*
>>> Openflow_connection_factory::create(
>>>              tokens[1], htons(port), tokens[3].c_str(),
>>>              tokens[4].c_str(), tokens[5].c_str());
>>>      } else if (tokens[0] == "pssl") {
>>> -        if (tokens.size() != 5) {
>>> -            log.err("pssl connection name not in the form
>>> pssl:[PORT]:KEY:CERT:CAFILE");
>>> +        if (tokens.size() != 6) {
>>> +            log.err("pssl connection name not in the form
>>> pssl:[IP]:[PORT]:KEY:CERT:CAFILE");
>>>              exit(EXIT_FAILURE);
>>>          }
>>> -        uint16_t port = atoi(tokens[1].c_str());
>>> +        const char* bind_ip = "0.0.0.0";
>>> +        if (tokens[1].size()>  0) {
>>> +          bind_ip = tokens[1].c_str();
>>> +        }
>>> +        uint16_t port = atoi(tokens[2].c_str());
>>>          if (!port) {
>>>              port = OFP_SSL_PORT;
>>>          }
>>>          return new Passive_ssl_openflow_connection_factory(
>>> -            htons(port), tokens[2].c_str(), tokens[3].c_str(),
>>> -            tokens[4].c_str());
>>> +            bind_ip, htons(port), tokens[3].c_str(), tokens[4].c_str(),
>>> +            tokens[5].c_str());
>>>      } else if (tokens[0] == "pcap") {
>>>  #ifndef HAVE_PCAP
>>>              log.err("pcap support not built in.  Ensure you have pcap
>>> installed and rebuild");
>>> @@ -1247,11 +1260,12 @@ Tcp_openflow_connection_factory::to_string()
>>>  }
>>>
>>>  Passive_tcp_openflow_connection_factory
>>> -::Passive_tcp_openflow_connection_factory(uint16_t port_)
>>> -    : port(port_)
>>> +::Passive_tcp_openflow_connection_factory(const char* bind_ip_,
>>> +                                          uint16_t port_)
>>> +    : bind_ip(bind_ip_), port(port_)
>>>  {
>>>      socket.set_reuseaddr();
>>> -    int error = socket.bind(htonl(INADDR_ANY), port);
>>> +    int error = socket.bind(bind_ip, port);
>>>      if (error) {
>>>          throw errno_exception(error, "bind");
>>>      }
>>> @@ -1335,17 +1349,19 @@ Ssl_openflow_connection_factory::to_string()
>>>  }
>>>
>>>  Passive_ssl_openflow_connection_factory
>>> -::Passive_ssl_openflow_connection_factory(uint16_t port_,
>>> -                                          const char *key, const char
>>> *cert,
>>> +::Passive_ssl_openflow_connection_factory(const char* bind_ip_,
>>> +                                          uint16_t port_, const char
>>> *key,
>>> +                                          const char *cert,
>>>                                            const char *CAfile)
>>>      : config(new Ssl_config(Ssl_config::SSLv3 | Ssl_config::TLSv1,
>>>                              Ssl_config::AUTHENTICATE_SERVER,
>>>                              Ssl_config::REQUIRE_CLIENT_CERT,
>>>                              key, cert, CAfile)),
>>>        socket(config),
>>> +      bind_ip(bind_ip_),
>>>        port(port_)
>>>  {
>>> -    int error = socket.bind(htonl(INADDR_ANY), port);
>>> +    int error = socket.bind(bind_ip, port);
>>>      if (error) {
>>>          throw errno_exception(error, "bind");
>>>      }
>>
>> _______________________________________________
>> nox-dev mailing list
>> nox-dev@noxrepo.org
>> http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org
>>
>

_______________________________________________
nox-dev mailing list
nox-dev@noxrepo.org
http://noxrepo.org/mailman/listinfo/nox-dev_noxrepo.org

Reply via email to