pythia-0.1: A utility program for retrieving system information.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Pythia.Services.NetInterface

Description

This module exports interface related services.

Since: 0.1

Synopsis

Queries

queryNetInterfaces :: (MonadPathReader m, MonadThrow m, MonadTypedProcess m) => NetInterfaceApp -> m NetInterfaces Source #

Queries for all network interface data.

Since: 0.1

queryNetInterface :: (MonadPathReader m, MonadThrow m, MonadTypedProcess m) => Device -> NetInterfaceApp -> m NetInterface Source #

Like queryNetInterfaces but returns data for a single device.

Since: 0.1

Functions

findUp :: NetInterfaces -> Maybe NetInterface Source #

Takes the first NetInterface that has state NetStateUp, according to NetInterfaceState's Ord:

Ethernet < Wifi < Wifi_P2P < Loopback < Tun

Examples

>>> findUp $ MkNetInterfaces []
Nothing
>>> :{
  let wifiUp = MkNetInterface "" (Just Wifi) NetStateUp (Just "WifiUp") mempty mempty
      wifiNetStateDown = MkNetInterface "" (Just Wifi) NetStateDown (Just "WifiNetStateDown") mempty mempty
      loopUp = MkNetInterface "" (Just Loopback) NetStateUp (Just "LoopUp") mempty mempty
   in findUp $ MkNetInterfaces [loopUp, wifiNetStateDown, wifiUp]
:}
Just (MkNetInterface {device = MkDevice {unDevice = ""}, ntype = Just Wifi, state = NetStateUp, name = Just "WifiUp", ipv4s = MkIpAddresses {unIpAddresses = []}, ipv6s = MkIpAddresses {unIpAddresses = []}})

Since: 0.1

Types

newtype NetInterfaces Source #

Since: 0.1

Constructors

MkNetInterfaces 

Instances

Instances details
Generic NetInterfaces Source # 
Instance details

Defined in Pythia.Services.NetInterface.Types

Associated Types

type Rep NetInterfaces :: Type -> Type #

Show NetInterfaces Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

NFData NetInterfaces Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Methods

rnf :: NetInterfaces -> () #

Eq NetInterfaces Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Ord NetInterfaces Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Display NetInterfaces Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaces Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaces = D1 ('MetaData "NetInterfaces" "Pythia.Services.NetInterface.Types" "pythia-0.1-inplace" 'True) (C1 ('MetaCons "MkNetInterfaces" 'PrefixI 'True) (S1 ('MetaSel ('Just "unNetInterfaces") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [NetInterface])))

data NetInterface Source #

Full connection data.

Since: 0.1

Constructors

MkNetInterface 

Fields

Instances

Instances details
Generic NetInterface Source # 
Instance details

Defined in Pythia.Services.NetInterface.Types

Associated Types

type Rep NetInterface :: Type -> Type #

Show NetInterface Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

NFData NetInterface Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Methods

rnf :: NetInterface -> () #

Eq NetInterface Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Ord NetInterface Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Display NetInterface Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

(k ~ A_Lens, a ~ Device, b ~ Device) => LabelOptic "device" k NetInterface NetInterface a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

(k ~ A_Lens, a ~ IpAddresses 'Ipv4, b ~ IpAddresses 'Ipv4) => LabelOptic "ipv4s" k NetInterface NetInterface a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

(k ~ A_Lens, a ~ IpAddresses 'Ipv6, b ~ IpAddresses 'Ipv6) => LabelOptic "ipv6s" k NetInterface NetInterface a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

(k ~ A_Lens, a ~ Maybe Text, b ~ Maybe Text) => LabelOptic "name" k NetInterface NetInterface a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

(k ~ A_Lens, a ~ Maybe NetInterfaceType, b ~ Maybe NetInterfaceType) => LabelOptic "ntype" k NetInterface NetInterface a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

(k ~ A_Lens, a ~ NetInterfaceState, b ~ NetInterfaceState) => LabelOptic "state" k NetInterface NetInterface a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterface Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

data NetInterfaceState Source #

Various connection states.

Since: 0.1

Constructors

NetStateUp

Since: 0.1

NetStateDown

Since: 0.1

NetStateUnknown Text

Since: 0.1

Instances

Instances details
Generic NetInterfaceState Source # 
Instance details

Defined in Pythia.Services.NetInterface.Types

Associated Types

type Rep NetInterfaceState :: Type -> Type #

Show NetInterfaceState Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

NFData NetInterfaceState Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Methods

rnf :: NetInterfaceState -> () #

Eq NetInterfaceState Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Ord NetInterfaceState Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Display NetInterfaceState Source # 
Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaceState Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaceState = D1 ('MetaData "NetInterfaceState" "Pythia.Services.NetInterface.Types" "pythia-0.1-inplace" 'False) (C1 ('MetaCons "NetStateUp" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "NetStateDown" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NetStateUnknown" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedStrict) (Rec0 Text))))

data NetInterfaceType Source #

Various connection types.

Since: 0.1

Constructors

Ethernet

Since: 0.1

Wifi

Since: 0.1

Wifi_P2P

Since: 0.1

Loopback

Since: 0.1

Tun

Since: 0.1

Instances

Instances details
Generic NetInterfaceType Source # 
Instance details

Defined in Pythia.Services.NetInterface.Types

Associated Types

type Rep NetInterfaceType :: Type -> Type #

Show NetInterfaceType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

NFData NetInterfaceType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Methods

rnf :: NetInterfaceType -> () #

Eq NetInterfaceType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Ord NetInterfaceType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Display NetInterfaceType Source # 
Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaceType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaceType = D1 ('MetaData "NetInterfaceType" "Pythia.Services.NetInterface.Types" "pythia-0.1-inplace" 'False) ((C1 ('MetaCons "Ethernet" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Wifi" 'PrefixI 'False) (U1 :: Type -> Type)) :+: (C1 ('MetaCons "Wifi_P2P" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Loopback" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Tun" 'PrefixI 'False) (U1 :: Type -> Type))))

newtype Device Source #

Newtype wrapper over a network device name.

Since: 0.1

Constructors

MkDevice 

Fields

Instances

Instances details
IsString Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

fromString :: String -> Device #

Generic Device Source # 
Instance details

Defined in Pythia.Services.Types.Network

Associated Types

type Rep Device :: Type -> Type #

Methods

from :: Device -> Rep Device x #

to :: Rep Device x -> Device #

Read Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Show Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

NFData Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

rnf :: Device -> () #

Eq Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

(==) :: Device -> Device -> Bool #

(/=) :: Device -> Device -> Bool #

Ord Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Display Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

(k ~ An_Iso, a ~ Text, b ~ Text) => LabelOptic "unDevice" k Device Device a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

type Rep Device Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

type Rep Device = D1 ('MetaData "Device" "Pythia.Services.Types.Network" "pythia-0.1-inplace" 'True) (C1 ('MetaCons "MkDevice" 'PrefixI 'True) (S1 ('MetaSel ('Just "unDevice") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data IpType Source #

IP types.

Since: 0.1

Constructors

Ipv4

Since: 0.1

Ipv6

Since: 0.1

Instances

Instances details
Generic IpType Source # 
Instance details

Defined in Pythia.Services.Types.Network

Associated Types

type Rep IpType :: Type -> Type #

Methods

from :: IpType -> Rep IpType x #

to :: Rep IpType x -> IpType #

Show IpType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

NFData IpType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

rnf :: IpType -> () #

Eq IpType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

(==) :: IpType -> IpType -> Bool #

(/=) :: IpType -> IpType -> Bool #

type Rep IpType Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

type Rep IpType = D1 ('MetaData "IpType" "Pythia.Services.Types.Network" "pythia-0.1-inplace" 'False) (C1 ('MetaCons "Ipv4" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "Ipv6" 'PrefixI 'False) (U1 :: Type -> Type))

newtype IpAddress a Source #

Type for an IP address. The type family IpRefinement refines the underlying Text according to the spec.

  • Ipv4: All characters are digits or dots, and the length is 0 < l < 16.
  • Ipv6: All characters are hex digits or colons, and the length is 0 < l < 40.

Since: 0.1

Constructors

MkIpAddress 

Fields

Instances

Instances details
(k ~ An_Iso, a ~ Refined (IpRefinement s) Text, b ~ Refined (IpRefinement s) Text) => LabelOptic "unIpAddress" k (IpAddress s) (IpAddress s) a b Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

labelOptic :: Optic k NoIx (IpAddress s) (IpAddress s) a b Source #

Generic (IpAddress a) Source # 
Instance details

Defined in Pythia.Services.Types.Network

Associated Types

type Rep (IpAddress a) :: Type -> Type #

Methods

from :: IpAddress a -> Rep (IpAddress a) x #

to :: Rep (IpAddress a) x -> IpAddress a #

Show (IpAddress a) Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

NFData (IpAddress a) Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

rnf :: IpAddress a -> () #

Eq (IpAddress a) Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Methods

(==) :: IpAddress a -> IpAddress a -> Bool #

(/=) :: IpAddress a -> IpAddress a -> Bool #

Ord (IpAddress a) Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

Display (IpAddress a) Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

type Rep (IpAddress a) Source #

Since: 0.1

Instance details

Defined in Pythia.Services.Types.Network

type Rep (IpAddress a) = D1 ('MetaData "IpAddress" "Pythia.Services.Types.Network" "pythia-0.1-inplace" 'True) (C1 ('MetaCons "MkIpAddress" 'PrefixI 'True) (S1 ('MetaSel ('Just "unIpAddress") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Refined (IpRefinement a) Text))))

Configuration

data NetInterfaceApp Source #

Determines how we should query the system for interface state information.

Since: 0.1

Constructors

NetInterfaceAppNmCli

Uses the Network Manager cli utility.

Since: 0.1

NetInterfaceAppIp

Uses the 'ip' utility.

Since: 0.1

Instances

Instances details
Bounded NetInterfaceApp Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Enum NetInterfaceApp Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Generic NetInterfaceApp Source # 
Instance details

Defined in Pythia.Services.NetInterface.Types

Associated Types

type Rep NetInterfaceApp :: Type -> Type #

Show NetInterfaceApp Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

NFData NetInterfaceApp Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Methods

rnf :: NetInterfaceApp -> () #

Eq NetInterfaceApp Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

Ord NetInterfaceApp Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaceApp Source #

Since: 0.1

Instance details

Defined in Pythia.Services.NetInterface.Types

type Rep NetInterfaceApp = D1 ('MetaData "NetInterfaceApp" "Pythia.Services.NetInterface.Types" "pythia-0.1-inplace" 'False) (C1 ('MetaCons "NetInterfaceAppNmCli" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "NetInterfaceAppIp" 'PrefixI 'False) (U1 :: Type -> Type))