16个版本 (3个稳定版)
1.1.0 | 2020年8月24日 |
---|---|
1.0.1 | 2020年7月12日 |
1.0.0 | 2020年4月25日 |
0.5.1 | 2020年7月12日 |
0.1.0 | 2016年2月13日 |
#15 in #mac
11,885 每月下载量
用于 50 个crate (37 直接)
36KB
670 行
eui48
A Rust库,用于表示和解析IEEE EUI-48,也称为MAC-48媒体访问控制地址。IEEE对其名称EUI-48和EUI-64拥有商标权,其中EUI是扩展唯一标识符的缩写。
使用方法
将以下内容添加到您的Cargo.toml
[dependencies]
eui48 = "1.0.1"
并将其添加到您的crate根目录
extern crate eui48;
示例
创建一个新的MAC地址并以规范形式打印出来
extern crate eui48;
use eui48::{MacAddress, Eui48};
fn main() {
let eui: Eui48 = [ 0x12, 0x34, 0x56, 0xAB, 0xCD, 0xEF ];
let mac = MacAddress::new( eui );
println!("{}", mac.to_canonical());
println!("{}", mac.to_hex_string());
println!("{}", mac.to_dot_string());
println!("{}", mac.to_hexadecimal());
println!("{}", mac.to_interfaceid());
println!("{}", mac.to_link_local());
let mac = MacAddress::parse_str( "01-02-03-0A-0b-0f" ).expect("Parse error {}");
let mac = MacAddress::parse_str( "01:02:03:0A:0b:0f" ).expect("Parse error {}");
let mac = MacAddress::parse_str( "0102.030A.0b0f" ).expect("Parse error {}");
let mac = MacAddress::parse_str( "0x1234567890ab" ).expect("Parse error {}");
}
注意
- 默认显示格式是规范形式
01-02-03-04-05-06
,除非启用了编译时功能disp_hexstring
,则默认格式为01:02:03:04:05:06
。
版本1.0.0及以上允许更灵活地解析MAC地址字符串,感谢Stan Drozd
- 允许库的调用者解析不遵循固定长度MAC地址约定的MAC地址(我指的是ebtables!)。一般来说,解析函数会尽力解释给定的字符串。
- 重写parse_str以使用正则表达式并更加宽容(现在它允许一次性的字符串切割错误,只要我们能够读取6个字节,就可以接受混合分隔符)
- 将InvalidCharacter错误枚举值更改为InvalidByteCount - InvalidCharacter不再支持。如果需要保留旧行为,请参阅版本 >=0.5.0 和 < 1.0.0。
序列化
当使用 serde
序列化MAC地址时,地址以格式化字符串的形式存储。这对于基于文本的协议(如JSON)来说非常合适,但会在二进制序列化时产生开销。当字符串再次反序列化时,开销会更大,因为需要使用完整的解析器而不是读取原始字节。为了减少这种开销,请在序列化和反序列化MAC地址到二进制协议时使用 serde_bytes
功能。
注意:serde_bytes
和 serde_json
是互斥的!
参考资料
作者
- 0.1 Andrew Baumhauer - 初始设计
- 0.2 rlcomstock3 - 添加对btree键的支持
- 0.3 Michal 'vorner' Vaner [email protected] - Serde 1.0支持
- 0.3.1 Michal 'vorner' Vaner [email protected] - 派生有用的特性
- 0.4.0 Rainer Stademann - 将ABI定义为repr(C)
- 0.4.1 Andrew Baumhauer - 添加IPv6接口ID和链路本地转换
- 0.4.2 Andrew Baumhauer / Eric Clone - 修复is_local()和is_unicast()函数中的错误
- 0.4.3 Andrew Baumhauer - 更新travis-ci, appveyor, codecov
- 0.4.4 Andrew Baumhauer - 更新文档
- 0.4.5 Andrew Baumhauer - 提高代码覆盖率并测试
- 0.4.6 Jiwoong Lee - 为兼容性添加to_array(),添加feature disp_hexstring
- 0.4.7 Adam Reichold - WASM更新
- 0.4.8 @kamek-pf - 尊重disp_hexstring标志
- 0.4.9 Sebastian Dietze - 添加新const
- 0.5.0 Andrew Baumhauer - 清理,更新版本,合并PR,更新单元测试
- 0.5.1 jrb0001 - 修复Link-Scoped Unicast的IPv6到link_local的错误
- 1.0.0 Stan Drozd, @rlcomstock3, 和 Andrew Baumhauer - 将所有分支和改进合并回此仓库
- 1.0.1 jrb0001 - 修复Link-Scoped Unicast的IPv6到link_local的错误
- 1.1.0 Felix Schreiner - 二进制序列化优化
依赖项
~2.3–3.5MB
~64K SLoC