Ale*_*lev 3 erlang integer openflow
我有一个问题:使用新的libs(loom,ofs_handler,of_driver)我需要发送设置消息给switch.我必须创建这样的记录:
-record(ofp_field, {
class = openflow_basic :: ofp_field_class(),
name :: ofp_field_type(),
has_mask = false :: boolean(),
value :: bitstring(),
mask :: bitstring()
}).
Run Code Online (Sandbox Code Playgroud)
但'value'必须是一个位串,我不知道如何正确地将端口号(例如8080,6633)转换为位串,因为我可以<<Port>>, <<Port:32/integer>>得到不同的结果.有没有人知道如何使它正确?
或者我必须使用binary:encode_unsigned?
在OpenFlow协议中,TCP和UDP端口号表示为16位整数(参见1.4.0规范中的表12).所以你应该写<<Port:16>>.
OpenFlow使用大端整数(即网络字节顺序),如果你没有指定另一个字节序,这就是Erlang生成的,这样代码就可以在任何平台上正常工作.(在C中,您必须在主机和网络字节顺序之间进行转换.)如果您需要其他协议,请参阅"Erlang参考手册中的位语法表达式",了解如何使用不同的字节序.