/*
Copyright (C) 2011 Srivats P.
This file is part of "Ostinato"
This is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see
*/
#ifndef _SERVER_LINUX_PORT_H
#define _SERVER_LINUX_PORT_H
#include
#ifdef Q_OS_LINUX
#include "pcapport.h"
class LinuxPort : public PcapPort
{
public:
LinuxPort(int id, const char *device);
~LinuxPort();
void init();
virtual OstProto::LinkState linkState();
virtual bool hasExclusiveControl();
virtual bool setExclusiveControl(bool exclusive);
static void fetchHostNetworkInfo();
static void freeHostNetworkInfo();
protected:
class StatsMonitor: public QThread
{
public:
StatsMonitor();
~StatsMonitor();
void run();
void stop();
bool waitForSetupFinished(int msecs = 10000);
private:
int netlinkStats();
void procStats();
int setPromisc(const char* portName);
static const int kRefreshFreq_ = 1; // in seconds
bool stop_;
bool setupDone_;
int ioctlSocket_;
};
bool isPromisc_;
bool clearPromisc_;
static QList allPorts_;
static StatsMonitor *monitor_; // rx/tx stats for ALL ports
private:
void populateInterfaceInfo();
static struct nl_sock *netSock_;
static struct nl_cache *linkCache_;
static struct nl_cache *addressCache_;
static struct nl_cache *routeCache_;
};
#endif
#endif