frenetic-lang/frenetic

Mod(EthDst()) Sends Incorrect OpenFlow Message in Packet Out

craig-riecke opened this issue · 1 comments

The following JSON packet out command:

{
'switch': 282574488338432, 'actions': [
{'header': 'ip4src', 'type': 'mod', 'value': {'mask': 32, 'addr': u'10.0.2.100'}}, 
{'header': 'ethsrc', 'type': 'mod', 'value': u'01:01:01:01:01:01'}, 
{'header': 'ethdst', 'type': 'mod', 'value': '00:00:01:00:00:02'}, 
{'pseudoport': {'type': 'physical', 'port': 1}, 'type': 'output'}], 
'in_port': None, 'payload': {'type': 'buffered', 'bufferid': 325}
}

Gets translated into the following OpenVSwitch OpenFlow message:

OFPT_PACKET_OUT (xid=0x0): in_port=ANY 
actions=mod_nw_src:10.0.2.100,
mod_dl_src:01:01:01:01:01:01,
mod_dl_src:00:00:01:00:00:02,
output:1 
buffer=0x00000145

Note how mod_dl_src is listed twice, one with the modification sent for header ethSrc and one for the header ethDst.

Fixed in #505