/*
 * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Yokogawa Electric Corporation,
 * YDC Corporation, IPA (Information-technology Promotion Agency, Japan).
 * All rights reserved.
 * 
 * Redistribution and use of this software in source and binary forms, with 
 * or without modification, are permitted provided that the following 
 * conditions and disclaimer are agreed and accepted by the user:
 * 
 * 1. Redistributions of source code must retain the above copyright 
 * notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the following disclaimer in the 
 * documentation and/or other materials provided with the distribution.
 * 
 * 3. Neither the names of the copyrighters, the name of the project which 
 * is related to this software (hereinafter referred to as "project") nor 
 * the names of the contributors may be used to endorse or promote products 
 * derived from this software without specific prior written permission.
 * 
 * 4. No merchantable use may be permitted without prior written 
 * notification to the copyrighters. However, using this software for the 
 * purpose of testing or evaluating any products including merchantable 
 * products may be permitted without any notification to the copyrighters.
 * 
 * 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHTERS, THE PROJECT AND 
 * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING 
 * BUT NOT LIMITED THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 * FOR A PARTICULAR PURPOSE, ARE DISCLAIMED.  IN NO EVENT SHALL THE 
 * COPYRIGHTERS, THE PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
 * CONTRACT,STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
 * THE POSSIBILITY OF SUCH DAMAGE.
 *
 * $TAHI: v6eval/lib/pkt/RunEnv.h,v 1.25 2001/10/05 11:41:20 tanaka Exp $
 */
#if !defined(__RunEnv_h__)
#define	__RunEnv_h__	1
#include "CmString.h"
#include "timeval.h"
#include <stdio.h>
class IfName:public CmCString {
private:
	CmCString interface_;
	CmCString ether_;
public:
	IfName(CSTR,CSTR,CSTR);
	~IfName();
static	IfName* create(CSTR,CSTR,CSTR,CSTR,uint32_t);
inline	CSTR interface() const;
inline	CSTR ether() const;
	void print(void*,...) const;
};
inline CSTR IfName::interface() const {return interface_.string();}
inline CSTR IfName::ether() const {return ether_.string();}

#include "CmCltn.h"
interfaceCmSet(IfNameSet,IfName);

typedef IfName* (*IfNameCreator)(CSTR,CSTR,CSTR,CSTR,uint32_t);
class CmMain;
class RunEnv {
public:
static	CSTR packetDefinition(CmMain&,StringList&,bool&);
static	CSTR defineFile();
static	CSTR unixPath(CmMain&,StringList* =0);
static	CSTR defaultVirtualIF();
static	CSTR interfaceUnixPath();
static	CSTR interface();
static	uint32_t bufferSize();
static	timeval* tvtimeout();
static	CSTR filter();
static	timeval seek();
static	uint32_t count();
static	void print();
static	IfName* tester(CSTR =0);
static	IfName* target(CSTR =0);
private:
static	CmCString interfaceUnixPath_;
//----------------------------------------------------------------------
// Information from TN(TESTING NODE) Config FILE
//----------------------------------------------------------------------
static	IfNameSet tnSet_;
static	CmCString* socketpath_;
static	CmCString* filterrule_;
//----------------------------------------------------------------------
// Information from NUT(NODE UNDER TEST) Config FILE
//----------------------------------------------------------------------
static	IfNameSet nutSet_;
//----------------------------------------------------------------------
// commad			pktbuf	pktctl	pktsend	pktrecv
// option
//----------------------------------------------------------------------
// -t: (TN file)	STR	O	O	O	O
// -i: (IF name)	STR	O	O	O	O
// -n: (NUT file)	STR	-	-	O	O
// -p: (PKT def)	STR	-	-	O	O
// -e: (timeout)	STR	-	-	-	O
// -s: (seek)		STR	-	-	-	O
// -c: (count)		NUM	-	-	-	O
// -l: 			NUM	O	O	O	O
// -d: 			NUM	O	O	O	O
// -m: (buffer size)	NUM	O	-	-	-
//----------------------------------------------------------------------
static	CmCString* tnFile_;
static	CmCString* ifName_;
static	CmCString* nutFile_;
static	CmCString* pktDef_;
static	uint32_t settimeout_;
static	timeval tvtimeout_;
static	timeval seek_;
static	uint32_t count_;
static	uint32_t bufsize_;
protected:
//----------------------------------------------------------------------
static	FILE* configFile(CmString*,CSTR,CSTR,CmCString&);
static	bool doTNline(STR,IfNameCreator,CSTR,uint32_t);
static	bool doTNfile(IfNameCreator);
static	bool doNUTline(STR,IfNameCreator,CSTR,uint32_t);
static	bool doNUTfile(IfNameCreator);
static	bool doOption(STR*,StringList&);
//----------------------------------------------------------------------
// SETING MEMBER FUNCTIONS
static	void socketpath(CSTR);
static	void filterrule(CSTR);
static	bool tnFile(CSTR);
static	bool ifName(CSTR);
static	bool nutFile(CSTR);
static	bool pktDef(CSTR);
static	bool timeout(CSTR);
static	void calctvtimeout();
static	bool seek(CSTR);
static	bool count(CSTR);
static	bool log(CSTR);
static	bool dbg(CSTR);
static	bool bufsize(CSTR);
static	bool setString(CmCString*&,CSTR,CSTR =0);
static	CSTR searchPath(CSTR,CSTR,CmCString&);
static	void printString(CSTR,const CmString*);
static	const uint32_t defaultBufferSize;
static	const CSTR defaultInterfaceName_;
static	const uint32_t interfaceMatchLen;
static	const CSTR defaultSocketDir_;
static	const CSTR defaultCongigDirEnv_;
static	const CSTR defaultSocketDirEnv_;
static	const CSTR defaultTNfileName_;
static	const CSTR defaultNUTfileName_;
static	const CSTR defaultDefSearchPath_;
};
#endif


syntax highlighted by Code2HTML, v. 0.9.1