git://git.onelab.eu
/
sliver-openvswitch.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add IPv6 support for OpenFlow, OVSDB, NetFlow, and sFlow.
[sliver-openvswitch.git]
/
python
/
ovs
/
socket_util.py
diff --git
a/python/ovs/socket_util.py
b/python/ovs/socket_util.py
index
c657047
..
be9fc95
100644
(file)
--- a/
python/ovs/socket_util.py
+++ b/
python/ovs/socket_util.py
@@
-1,4
+1,4
@@
-# Copyright (c) 2010, 2012 Nicira, Inc.
+# Copyright (c) 2010, 2012
, 2014
Nicira, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@
-177,24
+177,44
@@
def check_connection_completion(sock):
return errno.EAGAIN
return errno.EAGAIN
+def is_valid_ipv4_address(address):
+ try:
+ socket.inet_pton(socket.AF_INET, address)
+ except AttributeError:
+ try:
+ socket.inet_aton(address)
+ except socket.error:
+ return False
+ except socket.error:
+ return False
+
+ return True
+
+
def inet_parse_active(target, default_port):
address = target.split(":")
def inet_parse_active(target, default_port):
address = target.split(":")
- host_name = address[0]
- if not host_name:
- raise ValueError("%s: bad peer name format" % target)
if len(address) >= 2:
if len(address) >= 2:
- port = int(address[1])
- elif default_port:
- port = default_port
+ host_name = ":".join(address[0:-1]).lstrip('[').rstrip(']')
+ port = int(address[-1])
else:
else:
- raise ValueError("%s: port number must be specified" % target)
+ if default_port:
+ port = default_port
+ else:
+ raise ValueError("%s: port number must be specified" % target)
+ host_name = address[0]
+ if not host_name:
+ raise ValueError("%s: bad peer name format" % target)
return (host_name, port)
def inet_open_active(style, target, default_port, dscp):
address = inet_parse_active(target, default_port)
try:
return (host_name, port)
def inet_open_active(style, target, default_port, dscp):
address = inet_parse_active(target, default_port)
try:
- sock = socket.socket(socket.AF_INET, style, 0)
+ is_addr_inet = is_valid_ipv4_address(address[0])
+ if is_addr_inet:
+ sock = socket.socket(socket.AF_INET, style, 0)
+ else:
+ sock = socket.socket(socket.AF_INET6, style, 0)
except socket.error, e:
return get_exception_errno(e), None
except socket.error, e:
return get_exception_errno(e), None