我有一个问题:使用新的libs(loom,ofs_handler,of_driver)我需要向设备发送设置消息。 我必须创建这样的记录:
-record(ofp_field, {
class = openflow_basic :: ofp_field_class(),
name :: ofp_field_type(),
has_mask = false :: boolean(),
value :: bitstring(),
mask :: bitstring()
}).
但'value'必须是一个位串,我不知道如何正确地将端口号(例如8080,6633)转换为位串,因为我可以使<<Port>>, <<Port:32/integer>>
得到不同的结果。
有没有人知道如何使它正确?
或者我必须使用 binary:encode_unsigned
?
答案 0 :(得分:5)
在OpenFlow协议中,TCP和UDP端口号表示为16位整数(参见1.4.0规范中的表12)。因此,您应该写<<Port:16>>
。
OpenFlow在整个过程中使用大端整数(即网络字节顺序),如果你没有指定另一个字节序,那么这就是Erlang生成的,这样代码就可以在任何平台上正常工作。 (在C中,您必须在主机和网络字节顺序之间进行转换。)如果您需要其他协议,请参阅"Bit Syntax Expressions in the Erlang Reference Manual"了解如何使用不同的字节顺序。