mirror of
https://github.com/faucetsdn/ryu.git
synced 2026-05-10 14:56:11 +02:00
ofctl_v1_0: Add remaining actions
Signed-off-by: IWASE Yusuke <iwase.yusuke0@gmail.com> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
parent
74c6595305
commit
9ed1681783
@ -1530,6 +1530,12 @@ Description of Actions on request messages
|
||||
STRIP_VLAN Strip the 802.1Q header {"type": "STRIP_VLAN"}
|
||||
SET_DL_SRC Set ethernet source address using "dl_src" {"type": "SET_DL_SRC", "dl_src": "aa:bb:cc:11:22:33"}
|
||||
SET_DL_DST Set ethernet destination address using "dl_dst" {"type": "SET_DL_DST", "dl_dst": "aa:bb:cc:11:22:33"}
|
||||
SET_NW_SRC IP source address using "nw_src" {"type": "SET_NW_SRC", "nw_src": "10.0.0.1"}
|
||||
SET_NW_DST IP destination address using "nw_dst" {"type": "SET_NW_DST", "nw_dst": "10.0.0.1"}
|
||||
SET_NW_TOS Set IP ToS (DSCP field, 6 bits) using "nw_tos" {"type": "SET_NW_TOS", "nw_tos": 184}
|
||||
SET_TP_SRC Set TCP/UDP source port using "tp_src" {"type": "SET_TP_SRC", "tp_src": 8080}
|
||||
SET_TP_DST Set TCP/UDP destination port using "tp_dst" {"type": "SET_TP_DST", "tp_dst": 8080}
|
||||
ENQUEUE Output to queue with "queue_id" attached to "port" {"type": "ENQUEUE", "queue_id": 3, "port": 1}
|
||||
=============== ============================================================================ ======================================================
|
||||
|
||||
List of Actions (OpenFlow1.2 or later):
|
||||
|
||||
@ -32,10 +32,12 @@ def to_actions(dp, acts):
|
||||
for a in acts:
|
||||
action_type = a.get('type')
|
||||
if action_type == 'OUTPUT':
|
||||
out_port = int(a.get('port', ofproto_v1_0.OFPP_NONE))
|
||||
max_len = int(a.get('max_len', 65535))
|
||||
actions.append(dp.ofproto_parser.OFPActionOutput(
|
||||
out_port, max_len=max_len))
|
||||
port = int(a.get('port', ofproto_v1_0.OFPP_NONE))
|
||||
# NOTE: The reason of this magic number (0xffe5)
|
||||
# is because there is no good constant in of1.0.
|
||||
# The same value as OFPCML_MAX of of1.2 and of1.3 is used.
|
||||
max_len = int(a.get('max_len', 0xffe5))
|
||||
actions.append(dp.ofproto_parser.OFPActionOutput(port, max_len))
|
||||
elif action_type == 'SET_VLAN_VID':
|
||||
vlan_vid = int(a.get('vlan_vid', 0xffff))
|
||||
actions.append(dp.ofproto_parser.OFPActionVlanVid(vlan_vid))
|
||||
@ -50,6 +52,25 @@ def to_actions(dp, acts):
|
||||
elif action_type == 'SET_DL_DST':
|
||||
dl_dst = haddr_to_bin(a.get('dl_dst'))
|
||||
actions.append(dp.ofproto_parser.OFPActionSetDlDst(dl_dst))
|
||||
elif action_type == 'SET_NW_SRC':
|
||||
nw_src = ipv4_to_int(a.get('nw_src'))
|
||||
actions.append(dp.ofproto_parser.OFPActionSetNwSrc(nw_src))
|
||||
elif action_type == 'SET_NW_DST':
|
||||
nw_dst = ipv4_to_int(a.get('nw_dst'))
|
||||
actions.append(dp.ofproto_parser.OFPActionSetNwDst(nw_dst))
|
||||
elif action_type == 'SET_NW_TOS':
|
||||
nw_tos = int(a.get('nw_tos', 0))
|
||||
actions.append(dp.ofproto_parser.OFPActionSetNwTos(nw_tos))
|
||||
elif action_type == 'SET_TP_SRC':
|
||||
tp_src = int(a.get('tp_src', 0))
|
||||
actions.append(dp.ofproto_parser.OFPActionSetTpSrc(tp_src))
|
||||
elif action_type == 'SET_TP_DST':
|
||||
tp_dst = int(a.get('tp_dst', 0))
|
||||
actions.append(dp.ofproto_parser.OFPActionSetTpDst(tp_dst))
|
||||
elif action_type == 'ENQUEUE':
|
||||
port = int(a.get('port', ofproto_v1_0.OFPP_NONE))
|
||||
queue_id = int(a.get('queue_id', 0))
|
||||
actions.append(dp.ofproto_parser.OFPActionEnqueue(port, queue_id))
|
||||
else:
|
||||
LOG.debug('Unknown action type')
|
||||
|
||||
@ -73,6 +94,22 @@ def actions_to_str(acts):
|
||||
buf = 'SET_DL_SRC:' + haddr_to_str(a.dl_addr)
|
||||
elif action_type == ofproto_v1_0.OFPAT_SET_DL_DST:
|
||||
buf = 'SET_DL_DST:' + haddr_to_str(a.dl_addr)
|
||||
elif action_type == ofproto_v1_0.OFPAT_SET_NW_SRC:
|
||||
buf = 'SET_NW_SRC:' + \
|
||||
socket.inet_ntoa(struct.pack('!I', a.nw_addr))
|
||||
elif action_type == ofproto_v1_0.OFPAT_SET_NW_DST:
|
||||
buf = 'SET_NW_DST:' + \
|
||||
socket.inet_ntoa(struct.pack('!I', a.nw_addr))
|
||||
elif action_type == ofproto_v1_0.OFPAT_SET_NW_TOS:
|
||||
buf = 'SET_NW_TOS:' + str(a.tos)
|
||||
elif action_type == ofproto_v1_0.OFPAT_SET_TP_SRC:
|
||||
buf = 'SET_TP_SRC:' + str(a.tp)
|
||||
elif action_type == ofproto_v1_0.OFPAT_SET_TP_DST:
|
||||
buf = 'SET_TP_DST:' + str(a.tp)
|
||||
elif action_type == ofproto_v1_0.OFPAT_ENQUEUE:
|
||||
buf = 'ENQUEUE:' + str(a.queue_id)
|
||||
elif action_type == ofproto_v1_0.OFPAT_VENDOR:
|
||||
buf = 'VENDOR'
|
||||
else:
|
||||
buf = 'UNKNOWN'
|
||||
actions.append(buf)
|
||||
@ -80,6 +117,16 @@ def actions_to_str(acts):
|
||||
return actions
|
||||
|
||||
|
||||
def ipv4_to_int(addr):
|
||||
ip = addr.split('.')
|
||||
assert len(ip) == 4
|
||||
i = 0
|
||||
for b in ip:
|
||||
b = int(b)
|
||||
i = (i << 8) | b
|
||||
return i
|
||||
|
||||
|
||||
def to_match(dp, attrs):
|
||||
ofp = dp.ofproto
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user