use crate::constants::*;
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
pub struct LinkFlags(pub u32);
impl From<u32> for LinkFlags {
fn from(flags: u32) -> Self {
LinkFlags(flags)
}
}
impl<'a> From<&'a LinkFlags> for u32 {
fn from(flags: &'a LinkFlags) -> u32 {
flags.0
}
}
impl From<LinkFlags> for u32 {
fn from(flags: LinkFlags) -> u32 {
flags.0
}
}
impl Default for LinkFlags {
fn default() -> Self {
LinkFlags::new()
}
}
impl LinkFlags {
pub fn new() -> Self {
LinkFlags(0)
}
pub fn set_up(&mut self) {
self.0 |= IFF_UP
}
pub fn unset_up(&mut self) {
self.0 &= !IFF_UP
}
pub fn is_up(self) -> bool {
self.0 & IFF_UP == IFF_UP
}
pub fn set_running(&mut self) {
self.0 |= IFF_RUNNING
}
pub fn unset_running(&mut self) {
self.0 &= !IFF_RUNNING
}
pub fn is_running(self) -> bool {
self.0 & IFF_RUNNING == IFF_RUNNING
}
pub fn set_lower_up(&mut self) {
self.0 |= IFF_LOWER_UP
}
pub fn unset_lower_up(&mut self) {
self.0 &= !IFF_LOWER_UP
}
pub fn is_lower_up(self) -> bool {
self.0 & IFF_LOWER_UP == IFF_LOWER_UP
}
pub fn set_dormant(&mut self) {
self.0 |= IFF_DORMANT
}
pub fn unset_dormant(&mut self) {
self.0 &= !IFF_DORMANT
}
pub fn is_dormant(self) -> bool {
self.0 & IFF_DORMANT == IFF_DORMANT
}
pub fn set_broadcast(&mut self) {
self.0 |= IFF_BROADCAST
}
pub fn unset_broadcast(&mut self) {
self.0 &= !IFF_BROADCAST
}
pub fn is_broadcast(self) -> bool {
self.0 & IFF_BROADCAST == IFF_BROADCAST
}
pub fn set_multicast(&mut self) {
self.0 |= IFF_MULTICAST
}
pub fn unset_multicast(&mut self) {
self.0 &= !IFF_MULTICAST
}
pub fn is_multicast(self) -> bool {
self.0 & IFF_MULTICAST == IFF_MULTICAST
}
pub fn set_allmulti(&mut self) {
self.0 |= IFF_ALLMULTI
}
pub fn unset_allmulti(&mut self) {
self.0 &= !IFF_ALLMULTI
}
pub fn is_allmulti(self) -> bool {
self.0 & IFF_ALLMULTI == IFF_ALLMULTI
}
pub fn set_debug(&mut self) {
self.0 |= IFF_DEBUG
}
pub fn unset_debug(&mut self) {
self.0 &= !IFF_DEBUG
}
pub fn is_debug(self) -> bool {
self.0 & IFF_DEBUG == IFF_DEBUG
}
pub fn set_loopback(&mut self) {
self.0 |= IFF_LOOPBACK
}
pub fn unset_loopback(&mut self) {
self.0 &= !IFF_LOOPBACK
}
pub fn is_loopback(self) -> bool {
self.0 & IFF_LOOPBACK == IFF_LOOPBACK
}
pub fn set_point_to_point(&mut self) {
self.0 |= IFF_POINTOPOINT
}
pub fn unset_point_to_point(&mut self) {
self.0 &= !IFF_POINTOPOINT
}
pub fn is_point_to_point(self) -> bool {
self.0 & IFF_POINTOPOINT == IFF_POINTOPOINT
}
pub fn set_no_arp(&mut self) {
self.0 |= IFF_NOARP
}
pub fn unset_no_arp(&mut self) {
self.0 &= !IFF_NOARP
}
pub fn is_no_arp(self) -> bool {
self.0 & IFF_NOARP == IFF_NOARP
}
pub fn set_promiscuous(&mut self) {
self.0 |= IFF_PROMISC
}
pub fn unset_promiscuous(&mut self) {
self.0 &= !IFF_PROMISC
}
pub fn is_promiscuous(self) -> bool {
self.0 & IFF_PROMISC == IFF_PROMISC
}
pub fn set_master(&mut self) {
self.0 |= IFF_MASTER
}
pub fn unset_master(&mut self) {
self.0 &= !IFF_MASTER
}
pub fn is_master(self) -> bool {
self.0 & IFF_MASTER == IFF_MASTER
}
pub fn set_slave(&mut self) {
self.0 |= IFF_SLAVE
}
pub fn unset_slave(&mut self) {
self.0 &= !IFF_SLAVE
}
pub fn is_slave(self) -> bool {
self.0 & IFF_SLAVE == IFF_SLAVE
}
pub fn set_port_select(&mut self) {
self.0 |= IFF_PORTSEL
}
pub fn unset_port_select(&mut self) {
self.0 &= !IFF_PORTSEL
}
pub fn is_port_select(self) -> bool {
self.0 & IFF_PORTSEL == IFF_PORTSEL
}
pub fn set_auto_media_type(&mut self) {
self.0 |= IFF_AUTOMEDIA
}
pub fn unset_auto_media_type(&mut self) {
self.0 &= !IFF_AUTOMEDIA
}
pub fn is_auto_media_type(self) -> bool {
self.0 & IFF_AUTOMEDIA == IFF_AUTOMEDIA
}
}