traffic BTraffic {
  double fracSmall;
  TIME MIT;
  int smallSize, largeSize, NNodes;
  void setup (int nNodes, double frac, double mit, int small, int large) {
	Traffic::setup (SCL_off);
	fracSmall = frac;
	MIT = (TIME)(mit * TTime);
	cerr << "MIT in TTimes " << MIT NL;
	smallSize = small;
	largeSize = large;
	NNodes = nNodes;
	cout << "BTraffic::setup("<<nNodes<<","<<frac<<","<<mit<<","<<small<<","<<large<<")" NL;
  };
};

process BTGen {
  BTraffic *BTP;
  long MLength, From, To;

  void setup (BTraffic *bp) {
    BTP = bp;
  };

  states {Wait, Generate};
  perform {
	static TIME arrival = 0;
	state Wait:
		arrival += tRndPoisson(BTP->MIT);
		if(rnd(SEED_traffic) < BTP->fracSmall)
		{
			MLength = BTP->smallSize;
			From = 0;
			To = lRndUniform(1, BTP->NNodes - 1);	/* from ether, to gateway */
		}
		else
		{
			MLength = BTP->largeSize;
			From = lRndUniform(1, BTP->NNodes - 1);	/* from gateway, to ether */
			To = 0;
		}
		// cout << "BIMODAL: "<<arrival<<" "<<MLength<<" "<<From<<" "<<To NL;
		Assert (arrival >= Time, "Nonincreasing arrival time");
		Timer->wait (arrival - Time, Generate);
	state Generate:
		BTP->genMSG (From, To, 8 * MLength);	/* multiply by 8 to get bits */
		proceed Wait;
  };
};

