add NetInterfaceStat binding

This commit is contained in:
Doug MacEachern 2004-09-17 22:16:14 +00:00
parent f0d2b2a50f
commit 6fd5c009ee
1 changed files with 47 additions and 0 deletions

View File

@ -57,6 +57,10 @@ namespace Hyperic.Sigar {
return Hyperic.Sigar.NetInterfaceConfig.NativeGet(this, name); return Hyperic.Sigar.NetInterfaceConfig.NativeGet(this, name);
} }
public NetInterfaceStat NetInterfaceStat(string name) {
return Hyperic.Sigar.NetInterfaceStat.NativeGet(this, name);
}
~Sigar() { ~Sigar() {
sigar_close(this.sigar.Handle); sigar_close(this.sigar.Handle);
} }
@ -432,4 +436,47 @@ namespace Hyperic.Sigar {
} }
} }
} }
[StructLayout(LayoutKind.Sequential)]
public struct NetInterfaceStat {
public readonly ulong RxPackets;
public readonly ulong RxBytes;
public readonly ulong RxErrors;
public readonly ulong RxDropped;
public readonly ulong RxOverruns;
public readonly ulong RxFrame;
public readonly ulong TxPackets;
public readonly ulong TxBytes;
public readonly ulong TxErrors;
public readonly ulong TxDropped;
public readonly ulong TxOverruns;
public readonly ulong TxCollisions;
public readonly ulong TxCarrier;
[DllImport(Sigar.LIBSIGAR)]
private static extern int
sigar_net_interface_stat_get(IntPtr sigar, string name,
IntPtr ifstat);
internal static NetInterfaceStat NativeGet(Sigar sigar,
string name) {
Type type = typeof(NetInterfaceStat);
IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(type));
int status = sigar_net_interface_stat_get(sigar.sigar.Handle,
name, ptr);
if (status != Sigar.OK) {
Marshal.FreeHGlobal(ptr);
throw new ApplicationException("net_interface_stat_get");
}
NetInterfaceStat ifstat =
(NetInterfaceStat)Marshal.PtrToStructure(ptr, type);
Marshal.FreeHGlobal(ptr);
return ifstat;
}
}
} }