src/tools/procfs.rs: refactor read_proc_net_route() and read_proc_net_ipv6_route()

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
Christian Ebner 2019-04-23 17:04:30 +02:00 committed by Dietmar Maurer
parent eb46c3d1ec
commit ec8db837fb

View File

@ -302,7 +302,6 @@ pub struct ProcFsNetRoute {
pub fn read_proc_net_route() -> Result<Vec<ProcFsNetRoute>, Error> { pub fn read_proc_net_route() -> Result<Vec<ProcFsNetRoute>, Error> {
let path = "/proc/net/route"; let path = "/proc/net/route";
let file = OpenOptions::new().read(true).open(&path)?; let file = OpenOptions::new().read(true).open(&path)?;
let err = "Error while parsing '/proc/net/route";
let mut result = Vec::new(); let mut result = Vec::new();
for line in BufReader::new(&file).lines().skip(1) { for line in BufReader::new(&file).lines().skip(1) {
@ -310,13 +309,12 @@ pub fn read_proc_net_route() -> Result<Vec<ProcFsNetRoute>, Error> {
if content.is_empty() { continue; } if content.is_empty() { continue; }
let mut iter = content.split_whitespace(); let mut iter = content.split_whitespace();
let iface = iter.next().ok_or(format_err!("{}", err))?; let mut next = || iter.next()
let dest = iter.next().ok_or(format_err!("{}", err))?; .ok_or(format_err!("Error while parsing '{}'", path));
let gateway = iter.next().ok_or(format_err!("{}", err))?;
for _ in 0..3 { iter.next(); } let (iface, dest, gateway) = (next()?, next()?, next()?);
let metric = iter.next().ok_or(format_err!("{}", err))?; for _ in 0..3 { next()?; }
let mask = iter.next().ok_or(format_err!("{}", err))?; let (metric, mask, mtu) = (next()?, next()?, next()?);
let mtu = iter.next().ok_or(format_err!("{}", err))?;
result.push(ProcFsNetRoute { result.push(ProcFsNetRoute {
dest: hexstr_to_ipv4addr(dest)?, dest: hexstr_to_ipv4addr(dest)?,
@ -380,7 +378,6 @@ pub struct ProcFsNetIPv6Route {
pub fn read_proc_net_ipv6_route() -> Result<Vec<ProcFsNetIPv6Route>, Error> { pub fn read_proc_net_ipv6_route() -> Result<Vec<ProcFsNetIPv6Route>, Error> {
let path = "/proc/net/ipv6_route"; let path = "/proc/net/ipv6_route";
let file = OpenOptions::new().read(true).open(&path)?; let file = OpenOptions::new().read(true).open(&path)?;
let err = "Error while parsing '/proc/net/ipv6_route";
let mut result = Vec::new(); let mut result = Vec::new();
for line in BufReader::new(&file).lines() { for line in BufReader::new(&file).lines() {
@ -388,17 +385,18 @@ pub fn read_proc_net_ipv6_route() -> Result<Vec<ProcFsNetIPv6Route>, Error> {
if content.is_empty() { continue; } if content.is_empty() { continue; }
let mut iter = content.split_whitespace(); let mut iter = content.split_whitespace();
let dest = iter.next().ok_or(format_err!("{}", err))?; let mut next = || iter.next()
let dest_prefix_len = iter.next().ok_or(format_err!("{}", err))?; .ok_or(format_err!("Error while parsing '{}'", path));
for _ in 0..2 { iter.next(); }
let nexthop = iter.next().ok_or(format_err!("{}", err))?; let (dest, prefix) = (next()?, next()?);
let metric = iter.next().ok_or(format_err!("{}", err))?; for _ in 0..2 { next()?; }
for _ in 0..3 { iter.next(); } let (nexthop, metric) = (next()?, next()?);
let iface = iter.next().ok_or(format_err!("{}", err))?; for _ in 0..3 { next()?; }
let iface = next()?;
result.push(ProcFsNetIPv6Route { result.push(ProcFsNetIPv6Route {
dest: hexstr_to_ipv6addr(dest)?, dest: hexstr_to_ipv6addr(dest)?,
prefix: hexstr_to_u8(dest_prefix_len)?, prefix: hexstr_to_u8(prefix)?,
gateway: hexstr_to_ipv6addr(nexthop)?, gateway: hexstr_to_ipv6addr(nexthop)?,
metric: hexstr_to_u32(metric)?, metric: hexstr_to_u32(metric)?,
iface: iface.to_string(), iface: iface.to_string(),