Ejemplo n.º 1
0
//CONSTRUCTOR
    public LinkProtocol(Link link, LinkSide from, LinkSide to)
        : base(link, string.Format("{0}->{1}", from.NodeIdentifier, to.NodeIdentifier))
    {
        this.link = link;
        this.from = from;
        this.to   = to;
    }
Ejemplo n.º 2
0
//HELPERS
    void onLinkFree(LinkSide side)
    {
        double whenAdded;
        Bundle bundle = buffer.GetNext(out whenAdded);

        if (bundle != null)
        {
            linkSide.SendBundle(bundle, whenAdded);
        }
    }
Ejemplo n.º 3
0
//CONSTRUCTION
    public NetworkInterface(NetworkInterfaces interfaces, LinkSide linkSide)
        : base(interfaces, linkSide.Link.Identificator)
    {
        this.linkSide        = linkSide;
        this.interfaces      = interfaces;
        linkSide.OnLinkFree += onLinkFree;

        linkSide.Interface = this;

        buffer = new InterfaceBuffer(this);
    }
Ejemplo n.º 4
0
//CONSTRUCTOR
    public Link(XmlNode configuration)
        : base(configuration)
    {
        //create two link sides
        XmlAttribute from = XmlParser.GetAttribute(configuration, fromTag);
        XmlAttribute to   = XmlParser.GetAttribute(configuration, toTag);

        linkSides[0]            = new LinkSide(from.Value, this);
        linkSides[1]            = new LinkSide(to.Value, this);
        linkSides[0].SecondSide = linkSides[1];
        linkSides[1].SecondSide = linkSides[0];

        LinkProtocol[] protocols = new LinkProtocol[2];
        protocols[0] = LinkProtocol.Create(this, configuration, linkSides[0], linkSides[1]);
        protocols[1] = LinkProtocol.Create(this, configuration, linkSides[1], linkSides[0]);

        //connect elements
        linkSides[0].LinkProtocol = protocols[0];
        linkSides[1].LinkProtocol = protocols[1];

        //parse attributes
        XmlAttribute ber = configuration.Attributes[berTag];

        if (ber != null) // if ber == null leave default value of ber ==0
        {
            this.ber = double.Parse(ber.Value);
            if (this.ber < 0)
            {
                throw new ArgumentException("BER cannot be less than 0.");
            }
        }
        XmlAttribute speed = XmlParser.GetAttribute(configuration, speedTag);

        this.speed = double.Parse(speed.Value);
        if (this.speed < 0)
        {
            throw new ArgumentException("Link speed cannot be less than 0.");
        }
        //create delay generator
        XmlNode delayGenerator = XmlParser.GetChildNode(configuration, delayGeneratorTag);

        this.delayGenerator = RandomGenerator.Create(delayGenerator);
        //subscribe to state change events (break etc.)
        OnBreak   += onBreak;
        OnRepair  += onRepair;
        OnTurnOff += onTurnOff;
        OnTurnOn  += onTurnOn;
    }
Ejemplo n.º 5
0
//INTERFACE
    public static LinkProtocol Create(Link link, XmlNode configuration, LinkSide from, LinkSide to)
    {
        XmlAttribute type = XmlParser.GetAttribute(configuration, typeTag);

        switch (type.Value)
        {
        case LtpLinkProtocol.TypeTag:
            return(new LtpLinkProtocol(link, from, to));

        case UdpLinkProtocol.TypeTag:
            return(new UdpLinkProtocol(link, from, to));

        case TcpLinkProtocol.TypeTag:
            return(new TcpLinkProtocol(link, from, to));

        default:
            throw new ArgumentException("Unknown value \"" + type.Value + "\" of XML attribute \"" + typeTag + "\".");
        }
    }
Ejemplo n.º 6
0
//CALLBACKS
    void onLinkBreakChange(LinkSide linkSide)
    {
        if (!node.IsAvailable)
        {
            return;
        }
        LinkEntry entry = links[linkSide.Link];

        entry.IsBroken    = linkSide.IsBroken;
        entry.WhenUpdated = Timer.CurrentTime;
        List <DijkstraLinkStateUpdate> list = new List <DijkstraLinkStateUpdate>();

        foreach (LinkEntry linkEntry in links.Values)
        {
            DijkstraLinkStateUpdate linkUpdate = new DijkstraLinkStateUpdate(linkEntry.Link, linkEntry.WhenUpdated, linkEntry.IsBroken);
            list.Add(linkUpdate);
        }
        DijkstraUpdate    update = new DijkstraUpdate(list.ToArray());
        RoutingInfoBundle bundle = new RoutingInfoBundle(node, null, update);
        NetworkInterface  ignore = linkSide.IsBroken? node.NetworkInterfaces.Find(linkSide.Link):null;

        broadcast(bundle, ignore);
    }
Ejemplo n.º 7
0
 //CONSTRUCTOR
 public TcpLinkProtocol(Link link, LinkSide from, LinkSide to)
     : base(link, from, to)
 {
     currentWindow = Configuration.Protocols.Tcp.InitialWindow;
     multiplier    = Configuration.Protocols.Tcp.InitialMultiplier;
 }
Ejemplo n.º 8
0
//CONSTRUCTOR
    public LtpLinkProtocol(Link link, LinkSide from, LinkSide to)
        : base(link, from, to)
    {
    }
Ejemplo n.º 9
0
//INTERFACE
    public void AddNewLink(LinkSide linkSide)
    {
        interfaces.Add(linkSide.Link, new NetworkInterface(this, linkSide));
    }
Ejemplo n.º 10
0
 public void Connect(LinkSide linkSide)
 {
     interfaces.AddNewLink(linkSide);
 }