Example #1
0
        private Acl ExampleAcl()
        {
            var p1 = new Prefix {
                Length = 24, Address = Ip.Parse("72.1.2.0").Value
            };
            var p2 = new Prefix {
                Length = 24, Address = Ip.Parse("1.2.3.0").Value
            };
            var p3 = new Prefix {
                Length = 32, Address = Ip.Parse("8.8.8.8").Value
            };
            var p4 = new Prefix {
                Length = 32, Address = Ip.Parse("9.9.9.9").Value
            };
            var aclLine1 = new AclLine {
                DstIp = p1, SrcIp = p2, Permitted = true
            };
            var aclLine2 = new AclLine {
                DstIp = p3, SrcIp = p4, Permitted = false
            };
            var lines = new AclLine[2] {
                aclLine1, aclLine2
            };

            return(new Acl {
                Lines = lines
            });
        }
        public void TestSymbolicExecutionPacketAcl()
        {
            var p1 = new Prefix {
                Length = 24, Address = Ip.Parse("72.1.2.0").Value
            };
            var p2 = new Prefix {
                Length = 24, Address = Ip.Parse("1.2.3.0").Value
            };
            var p3 = new Prefix {
                Length = 32, Address = Ip.Parse("8.8.8.8").Value
            };
            var p4 = new Prefix {
                Length = 32, Address = Ip.Parse("9.9.9.9").Value
            };
            var aclLine1 = new AclLine {
                DstIp = p1, SrcIp = p2, Permitted = true
            };
            var aclLine2 = new AclLine {
                DstIp = p3, SrcIp = p4, Permitted = true
            };
            var lines = new AclLine[2] {
                aclLine1, aclLine2
            };
            var acl = new Acl {
                Lines = lines
            };

            var f = Function <IpHeader, bool>(h => acl.Process(h, 0));

            Assert.AreEqual(3, f.GenerateInputs().Count());
        }
Example #3
0
        public void TestAclEvaluate()
        {
            var function = Function <IpHeader, bool>(p => ExampleAcl().Process(p, 0));
            var result   = function.Evaluate(new IpHeader {
                DstIp = Ip.Parse("72.1.2.1"), SrcIp = Ip.Parse("1.2.3.4")
            });

            Assert.IsTrue(result);
        }
Example #4
0
        public void TestAclWithLinesEvaluate()
        {
            var function = Function <IpHeader, (bool, ushort)>(p => ExampleAcl().ProcessProvenance(p, 0));
            var result   = function.Evaluate(new IpHeader {
                DstIp = Ip.Parse("8.8.8.8"), SrcIp = Ip.Parse("9.9.9.9")
            });

            Assert.AreEqual(result.Item1, false);
            Assert.AreEqual(result.Item2, (ushort)2);
            var packet = function.Find((p, l) => l.Item2() == 3);

            Assert.AreEqual(3, function.Evaluate(packet.Value).Item2);
        }
Example #5
0
        private Network.Network ExampleNetwork()
        {
            // Simple network: [R1] --i1--i2-- [R2] --i3--i4-- [R3]

            // setup interfaces
            Interface i1 = new Interface();

            i1.Name       = "i1";
            i1.GreTunnel  = (Ip.Parse("1.2.3.4"), Ip.Parse("5.6.7.8"));
            i1.PortNumber = 1;

            Interface i2 = new Interface();

            i2.Name       = "i2";
            i2.PortNumber = 1;

            Interface i3 = new Interface();

            i3.Name       = "i3";
            i3.PortNumber = 2;

            Interface i4 = new Interface();

            i4.Name       = "i4";
            i4.GreTunnel  = (Ip.Parse("5.6.7.8"), Ip.Parse("1.2.3.4"));
            i4.PortNumber = 1;
            i4.InboundAcl = new Acl
            {
                Lines = new AclLine[]
                {
                    new AclLine
                    {
                        DstIp = new Prefix {
                            Address = Ip.Parse("172.0.0.0").Value, Length = 24
                        },
                        SrcIp = new Prefix {
                            Address = Ip.Parse("63.1.0.0").Value, Length = 16
                        },
                        Permitted   = true,
                        DstPortLow  = 53,
                        DstPortHigh = 53,
                    },
                },
            };

            // attach neighbors
            i1.Neighbor = i2;
            i2.Neighbor = i1;
            i3.Neighbor = i4;
            i4.Neighbor = i3;

            // setup devices
            Device d1 = new Device();

            d1.Name       = "R1";
            d1.Interfaces = new Interface[] { i1 };

            Device d2 = new Device();

            d2.Name       = "R2";
            d2.Interfaces = new Interface[] { i2, i3 };

            Device d3 = new Device();

            d3.Name       = "R3";
            d3.Interfaces = new Interface[] { i4 };

            // associate owners
            i1.Owner = d1;
            i2.Owner = d2;
            i3.Owner = d2;
            i4.Owner = d3;

            // create and associate forwarding tables
            var table1 = new ForwardingTable
            {
                Rules = new ForwardingRule[]
                {
                    new ForwardingRule
                    {
                        DstIpLow  = Ip.Parse("5.0.0.0"),
                        DstIpHigh = Ip.Parse("6.0.0.0"),
                        Interface = i1,
                    },
                },
            };

            var table2 = new ForwardingTable
            {
                Rules = new ForwardingRule[]
                {
                    new ForwardingRule
                    {
                        DstIpLow  = Ip.Parse("5.0.0.0"),
                        DstIpHigh = Ip.Parse("6.0.0.0"),
                        Interface = i3,
                    },
                    new ForwardingRule
                    {
                        DstIpLow  = Ip.Parse("1.0.0.0"),
                        DstIpHigh = Ip.Parse("2.0.0.0"),
                        Interface = i2,
                    },
                },
            };

            var table3 = new ForwardingTable
            {
                Rules = new ForwardingRule[]
                {
                    new ForwardingRule
                    {
                        DstIpLow  = Ip.Parse("1.0.0.0"),
                        DstIpHigh = Ip.Parse("2.0.0.0"),
                        Interface = i4,
                    },
                },
            };

            d1.Table = table1;
            d2.Table = table2;
            d3.Table = table3;

            // create the network
            var network = new Network.Network {
                Devices = new Dictionary <string, Device>()
            };

            network.Devices["R1"] = d1;
            network.Devices["R2"] = d2;
            network.Devices["R3"] = d3;

            return(network);
        }