Code Monkey home page Code Monkey logo

linc-switch's People

Contributors

akorosmezey avatar ananddaga14 avatar dmitry-orekhov avatar konradkaplita avatar legoscia avatar majastanislawska avatar marcsugiyama avatar mentels avatar nygge avatar paulgray avatar rpt avatar ruanpienaar avatar sandhyan avatar shivarammysore avatar sigstop avatar subh007 avatar tsloughter avatar yamt avatar zoltanlajoskis avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

linc-switch's Issues

Git configuration for SSL in make files

If LINC switch code is installed on a new machine, it is possible that SSL CA certificates may not be available. It is worthwhile to to include:

% git config --global http.sslVerify false

in the make files so that user does not get an error to download the necessary files from Github?

OF-Config get-config only reports controllers with active connection

First, I followed the OF-Config demo at https://github.com/FlowForwarding/LINC-Switch/wiki/OF-Config-Demo and was successful. However, while experimenting I tried the get_config command when the controller was not running, and no controllers are listed. From the switch, using the command linc_ofconfig:get_switch_state(0), returns the same result. I also tried the test with the controller configured in the sys.config file and get the same result, so it is not related to adding the controller using OF-Config. I'll provide version and example output below.

I can't tell for certain is this is a bug, but in the OF-Config 1.1.1 doc, section 9.2.2 says "When issuing a NETCONF get request all elements in the requested sub-tree must be returned in the result." The current behavior makes checking configuration difficult, since you have to have a controller running to see if it is configured properly.

I'm running LINC-Switch with commit 35a56de on Mac OS X.

Xml output with no controller running:

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="0">
  <data>
    <capable-switch xmlns="urn:onf:of111:config:yang">
      <id>CapableSwitch0</id>
      <resources/>
      <logical-switches>
        <switch>
          <id>LogicalSwitch0</id>
          <datapath-id>00:23:DF:DE:24:B2:00:00</datapath-id>
          <controllers/>
        </switch>
      </logical-switches>
    </capable-switch>
  </data>
</rpc-reply>

Xml output with a controller running:

<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="0">
  <data>
    <capable-switch xmlns="urn:onf:of111:config:yang">
      <id>CapableSwitch0</id>
      <resources/>
      <logical-switches>
        <switch>
          <id>LogicalSwitch0</id>
          <datapath-id>00:23:DF:DE:24:B2:00:00</datapath-id>
          <controllers>
            <controller>
              <id>Switch0-DefaultController</id>
              <ip-address>127.0.0.1</ip-address>
              <port>6633</port>
              <protocol>tcp</protocol>
            </controller>
          </controllers>
        </switch>
      </logical-switches>
    </capable-switch>
  </data>
</rpc-reply>

linc_ofconfig:get_switch_state(0) output with no controller running:

{[],
[#logical_switch{
id = "LogicalSwitch0",
capabilities =
#capabilities{
max_buffered_packets = 0,max_tables = 255,
max_ports = 16777216,flow_statistics = true,
table_statistics = true,port_statistics = true,
group_statistics = true,queue_statistics = true,
reassemble_ip_fragments = false,block_looping_ports = false,
reserved_port_types = [all,controller,table,inport,any],
group_types = [all,select,indirect,'fast-failover'],
group_capabilities =
['select-weight','select-liveness',chaining],
action_types =
[output,group,'set-queue','set-mpls-ttl','dec-mpls-ttl',
'set-nw-ttl','dec-nw-ttl','copy-ttl-out'|...],
instruction_types =
['goto-table','write-metadata','write-actions',
'apply-actions','clear-actions',meter]},
datapath_id = "00:23:DF:DE:24:B2:00:00",enabled = true,
check_controller_certificate = false,
lost_connection_behavior = failSecureMode,controllers = [],
resources = []}]}

linc_ofconfig:get_switch_state(0) output with a controller running:

{[],
[#logical_switch{
id = "LogicalSwitch0",
capabilities =
#capabilities{
max_buffered_packets = 0,max_tables = 255,
max_ports = 16777216,flow_statistics = true,
table_statistics = true,port_statistics = true,
group_statistics = true,queue_statistics = true,
reassemble_ip_fragments = false,block_looping_ports = false,
reserved_port_types = [all,controller,table,inport,any],
group_types = [all,select,indirect,'fast-failover'],
group_capabilities =
['select-weight','select-liveness',chaining],
action_types =
[output,group,'set-queue','set-mpls-ttl','dec-mpls-ttl',
'set-nw-ttl','dec-nw-ttl','copy-ttl-out'|...],
instruction_types =
['goto-table','write-metadata','write-actions',
'apply-actions','clear-actions',meter]},
datapath_id = "00:23:DF:DE:24:B2:00:00",enabled = true,
check_controller_certificate = false,
lost_connection_behavior = failSecureMode,
controllers =
[#controller{
operation = undefined,id = "Switch0-DefaultController",
role = equal,ip_address = "127.0.0.1",port = 6633,
local_ip_address = "127.0.0.1",local_port = 52130,
protocol = tcp,
state =
#controller_state{
connection_state = up,current_version = '1.3',
supported_versions = ['1.3']}}],
resources = []}]}

Sorting instructions

The sorting of instructions in create_flow_entry is wrong, should be sorting on element 2.

Failed lookup: 0 linc_port_queue

Whenever OF-Config related commands are sent via Netconf clients to LINC, for each logical switch available (in case of get-config) or for that corresponding logical switch (in case of edit-config for logical switch x), on the LINC console I get the below errors. Note that LINC ports are tied directly to eth interfaces.

02:06:03.667 [debug] Failed lookup: 0 linc_port_queue
02:06:03.667 [debug] Failed lookup: 0 linc_port_queue
02:06:03.667 [debug] Failed lookup: 0 linc_port_queue
02:06:03.667 [debug] Failed lookup: 0 linc_port_queue
02:06:03.667 [debug] Failed lookup: 0 linc_port_queue
02:06:03.667 [debug] Failed lookup: 0 linc_port_queue
02:06:03.667 [debug] Failed lookup: 0 linc_port_queue
02:06:03.667 [debug] Failed lookup: 1 linc_port_queue
02:06:03.667 [debug] Failed lookup: 1 linc_port_queue
02:06:03.668 [debug] Failed lookup: 1 linc_port_queue
02:06:03.668 [debug] Failed lookup: 1 linc_port_queue
02:06:03.668 [debug] Failed lookup: 1 linc_port_queue
02:06:03.668 [debug] Failed lookup: 1 linc_port_queue
02:06:03.668 [debug] Failed lookup: 1 linc_port_queue
02:06:03.668 [debug] Failed lookup: 1 linc_port_queue

[epcap] In eth mode pcap re-captures packets sent out

When running in ethernet mode (no taps and bridges), LINC uses epcap library. It captures both incoming packets, and outgoing, sent by LINC. The routing works (I see correct ICMP requests and responses coming through), but it creates a flood of re-captured, re-processed and repeatedly re-transmitted packets.

Error building with R16B

I checked rebar.config in deps directory, which has
{require_otp_vsn, "R1[56]B"}, but I get the following error:
ERROR: OTP release R16B does not match required regex R15B
ERROR: compile failed while processing /home/snarayan/Documents/codes/git/LINC-Switch/deps/of_protocol: rebar_abort

OXM VLAN fields should match on outer VLAN tag only

The OXM VLAN VID and VLAN PCP fields hould only match on the outermost VLAN tags. P 36.: "If not explictely specified in the field description, each field type refer the the outermost occurrence of the field in the packet headers."

The problem with the code is that currently the pkt:decode will push all vlan tags into the pkt packet structure, and I suppose all of those will be converted into OXM fields. So the OFS packet structure will contain multiple VID and PCP fields. AFAICS, the ofs_userspace_routing:match_flow_entry basically works as "all flow entry fields must match any of the packet fields". As a consequence flow entries will accept a multi-tagged frame even if it is the inner tags that have the proper VID and/or PCP fields.

Using Floodlight controller for LINC

I tried using Floodlight controller with LINC by changing the hostname in sys.config. But i get the following error:

[root@xenovs LINC-Switch]# rel/openflow/bin/openflow console
Exec: /root/LINC-Switch/rel/openflow/erts-5.9.1/bin/erlexec -boot /root/LINC-Switch/rel/openflow/releases/0.1/openflow -mode embedded -config /root/LINC-Switch/rel/openflow/releases/0.1/sys.config -args_file /root/LINC-Switch/rel/openflow/releases/0.1/vm.args -- console
Root: /root/LINC-Switch/rel/openflow
{"could not start kernel pid",application_controller,"error in config file "/root/LINC-Switch/rel/openflow/releases/0.1/sys.config" (52): syntax error before: ?"}

Now when i change sys.config to revert back to the default controller, it is still giving the same error as above.

How do i use Floodlight or any other controller with LINC?

Relax the OTP version requirement

Hi there, this bug applies to most of the FlowForwarding projects -- the rebar.config required_otp_version is too strict and disallows building with R16B+.

Something like {require_otp_vsn, "R1[56789]B"}. covers R15+ somewhat conveniently.

Compile issue

Hi just downloaded a clean copy and got the following compile issue:

bash-3.2$ rebar compile
Stu's Erlang Environment
==> of_switch (compile)
src/sliding_window.erl:none: error in parse transform 'lager_transform': {undef,
[{lager_transform,
parse_transform,
...

                                    [{file,"compile.erl"},
                                            {line,271}]},
                                          {compile,internal,3,
                                           [{file,"compile.erl"},
                                            {line,246}]}]}

I'm guess we don't want "fail_on_warning" in rebar.config?

{erl_opts, [fail_on_warning,
{parse_transform, lager_transform}]}.

Need multi_part relpy with OFPMP_PORT_DESC for discovering port status.

Reported by a user:
In an interoperability test between LINC and XXX controller with OF1.3 mode.
It does not seem that LINC responds to multi_part request with OFPMP_PORT_DESC.
Our controller disconnects secure channel cause of no multi_part reply.
We need multi_part relpy with OFPMP_PORT_DESC for discovering port status.

outport in flow mod matching

When checking the flows for modify or delete operations, if outport is specified in the flow_mod message a check must be done to see that an output operation with the specified port is present.

Packet reordering within a flow

It seems that each and every datapath frame is routed by a separate process. I understand that processing packets of the same flow should require the very same number of reductions, and the Erlang scheduler being very precise, packets of the same flow should not get reordered.

However, given there is no explicit guarantee for this, and I see no countermeasures made (like an ordering-buffer on output), has there been any measurement made to see if packets get reordered or not?

Can't start the switch

Hi,

I followed the install instructions but I'm having the following error when I try to start the switch:

{"init terminating in do_boot",{'cannot load',eenum,get_file}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

how to create tap interfaces

gandhi mathi wrote:

I am new to LINC switch.I tried the testbed set up and ping .I didn't understand the tap interfaces creation explained in testbed setup. When I run the switch after editing sys.config in rel folder , it is giving me error as " no function clause matching linc_us4_port:init([{ofs_port_no,1},{interface,"tap0"},{ip,"fe80::216:3eff:fe39:c3fe"}]) line 247 in gen_server:init_it/6 line 328" . Do I need to assign the ip addresses manually or shall I use the IPV6 address.

Please paste your sys.config file and provide us with some basic informations:

  • What version of LINC are you using?
  • What operation system are you using?
  • What's your network setup?
  • Are you using virtual machines? Which hypervisor?

OpenFlow 1.3.1 set TCP destination port action

Hi,

We ( Luxoft Twister team ) tried a few OpenFlow 1.3.1 conformance tests against LINC and noticed some issues.

Here is one test scenario:
The controller insert a flow mod that has 2 actions against a matched packet.
First action is to change the IPv4 TCP destination port.
Second action is to forward the packet to an egress port.
Injected a packet to match the flow mod and we noticed that we do not receive it at the egress port.

Here are some quick logs:

Packet injected:

[ Ethernet ]

dst = 00:01:02:03:04:05
src = 00:06:07:08:09:0a
type = 0x800

[ IP ]

 version   = 4
 ihl       = None
 tos       = 0x0
 len       = None
 id        = 1
 flags     = 
 frag      = 0
 ttl       = 64
 proto     = tcp
 chksum    = None
 src       = 192.168.0.1
 dst       = 192.168.0.2
 \options   \

[ TCP ]

    sport     = 1234
    dport     = http
    seq       = 0
    ack       = 0
    dataofs   = None
    reserved  = 0
    flags     = S
    window    = 8192
    chksum    = None
    urgptr    = 0
    options   = {}

[ Raw ]

       load      = 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD'

Flowmod:

flow_mod (OFPT_FLOW_MOD)
ofp header
version: 4
type: 14
length: 0
xid: 0
cookie: 0
cookie_mask: 0
table_id: 0
command: 0
idle_timeout: 0
hard_timeout: 0
priority: 1
buffer_id: 4294967295
out_port: 4294967295
out_group: 4294967295
flags: 0
match:
type: 1
length: 4
matchlist with 4 items
match 1:
eth_type
oxm_tlv_class=32768
oxm_tlv_field=0x5
oxm_tlv_hasmask=False
oxm_tlv_length: 0x2
value: 32303438 match 2:
in_port
oxm_tlv_class=32768
oxm_tlv_field=0x0
oxm_tlv_hasmask=False
oxm_tlv_length: 0x4
value: 31 match 3:
eth_src
oxm_tlv_class=32768
oxm_tlv_field=0x4
oxm_tlv_hasmask=False
oxm_tlv_length: 0x6
value: 5b302c20362c20372c20382c20392c2031305d match 4:
eth_dst
oxm_tlv_class=32768
oxm_tlv_field=0x3
oxm_tlv_hasmask=False
oxm_tlv_length: 0x6
value: 5b302c20312c20322c20332c20342c20355d List instructions
instructionlist with 1 items
instruction 1:
instruction_apply_actions
type: 4
len: 8
actionlist with 2 items
action 1:
action_set_field
type: 25
len: 8
field: <ce_libs.openflow.of_13.match.tcp_dst instance at 0x961770c>
action 2:
action_output
type: 0
len: 16
port: 2
max_len: 0

Performance testing

I am curious as to if anyone has done any performance testing of LINC-Switch? What kind of throughput numbers have people seen? I am especially curious about what order of magnitude of throughput I could expect to see on XEN.

experimenters always have a body

Experimenter message, action, instruction, match field should have an opaque body. Message is handled properly, but action and instruction mapping seem to assume they always have a zero-length body.

OXM Ethertype field generated for packets ignores VLAN tags

The OXM Ethertype field originates from the DL_TYPE field in OF 1.1, and its purpose is to identify the payload above layer 2 (MPLS, IPv4, IPv6, …).
The description in Table 8. (p 36.) says: "Ethernet type of the OpenFlow packet payload, after VLAN tags."
So if an incoming frame has no vlan tags, the ethertype of the ethernet header should be used. Otherwise, the ethertype of the last vlan tag (this includes B-Tags in OF 1.3) must be matched against the
value specified in OXM ethertype field of the Flow Entry.

When the pkt packet is converted into an ofs packet, the ofs_userspace_convert:packet_fields function simply maps the ethertype of the ethernet frame to this OXM field; whereas it should update the field whenever it encounters a later VLAN tag.

of_switch (compile) errors - missing ofp_flow_mod and other definitions

hi
i'm totally new here.
I followed all instructions from here: https://github.com/FlowForwarding/LINC-Switch
i cloned with git the LINC-Switch.git
git clone https://github.com/FlowForwarding/LINC-Switch.git
there was one error, as I'm behind a proxy so i changed deps/of_protocol/rebar.config to use http: and not git: when getting eenum
once done, the make fails with:

==> of_switch (compile)
src/gen_switch.erl:43: type ofp_flow_mod() undefined
src/gen_switch.erl:49: type ofp_table_mod() undefined
src/gen_switch.erl:55: type ofp_port_mod() undefined
and more

any suggestions?
Thanks,
Doron

OF-Config availability?

Hi maintainer,
Thanks a lot for opensource LINC, it's a great product for learning openflow.
I want to know does OF-Config is well supported by LINC or not, seems that it's disabled by default.
Besides, I think the schema provided in OF-Config spec is not quite accurate, I note that LINC support validate the schema, does the example like example in OF-Config spec can be validated succesfully?
Thanks in advance.

Test Bed setup

I feel hard with Zen hyper visor. Can I use VMs on the VMware, in that case can I use the network configuration as we did for openvswitch.
Thanks
Gandhi

Connecting two LINC-Switches to the same Floodlight Controller

I was able to connect 1 LINC switch to the Floodlight Controller.

Simultaneously, I also tried connecting another LINC switch to the same Floodlight controller but then the previous switch crashes & the second switch gets connected.

So does that mean that i can only control 1 LINC switch at a time.
I noticed that the controller notes same dpid 00:00:00:00:00:00 for both of them.
Then i tried this with 2 ovs switches & they seem to connect showing different dpid's.

So can you tell me how can i change the dpid of the LINC switch?

Thanks,
Anand

Flow priorites inverted

Flow entries in the flow tables are sorted by increasing priority. This leads to that the search for matching flows in linc_us3_routing tries the flows in order of increasing priority instead of decreasing priority, so the lowest instead of the highest priority flow that matches is selected.

OpenFlow 1.3.1 set DST IP action

Hi,

We ( Luxoft Twister team ) tried a few OpenFlow 1.3.1 conformance tests against LINC and noticed some issues.

Here is one test scenario:
The controller insert a flow mod that has 2 actions against a matched packet.
First action is to change the IPv4 destination field.
Second action is to forward the packet to an egress port.
Injected a packet to match the flow mod and we noticed that the egress port was applied by LINC, so the second action is followed. The issue is that LINC didn't change the IPv4 destination address.
Here are some quick logs:

Flow mod message sent to LINC:

flow_mod (OFPT_FLOW_MOD)
ofp header
version: 4
type: 14
length: 0
xid: 0
cookie: 0
cookie_mask: 0
table_id: 0
command: 0
idle_timeout: 0
hard_timeout: 0
priority: 1
buffer_id: 4294967295
out_port: 4294967295
out_group: 4294967295
flags: 0
match:
type: 1
length: 4
matchlist with 3 items
match 1:
in_port
oxm_tlv_class=32768
oxm_tlv_field=0x0
oxm_tlv_hasmask=False
oxm_tlv_length: 0x4
value: 31 match 2:
eth_src
oxm_tlv_class=32768
oxm_tlv_field=0x4
oxm_tlv_hasmask=False
oxm_tlv_length: 0x6
value: 5b302c20362c20372c20382c20392c2031305d match 3:
eth_dst
oxm_tlv_class=32768
oxm_tlv_field=0x3
oxm_tlv_hasmask=False
oxm_tlv_length: 0x6
value: 5b302c20312c20322c20332c20342c20355d List instructions
instructionlist with 1 items
instruction 1:
instruction_apply_actions
type: 4
len: 8
actionlist with 2 items
action 1:
action_set_field
type: 25
len: 8
field: <oftest.match.ipv4_dst instance at 0xa7e74ec>
action 2:
action_output
type: 0
len: 16
port: 2
max_len: 0

Packet injected ( IPv4 dst is 192.168.0.2 ):

[ Ethernet ]

dst = 00:01:02:03:04:05
src = 00:06:07:08:09:0a
type = 0x800

[ IP ]

 version   = 4
 ihl       = None
 tos       = 0x0
 len       = None
 id        = 1
 flags     =
 frag      = 0
 ttl       = 64
 proto     = tcp
 chksum    = None
 src       = 192.168.0.1
 dst       = 192.168.0.2
 \options   \

[ TCP ]

    sport     = 1234
    dport     = http
    seq       = 0
    ack       = 0
    dataofs   = None
    reserved  = 0
    flags     = S
    window    = 8192
    chksum    = None
    urgptr    = 0
    options   = {}

[ Raw ]

       load      = 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD'

Packet at egress port ( IPv4 dst address is still 192.168.0.2 ):

[ Ethernet ]

dst = 00:01:02:03:04:05
src = 00:06:07:08:09:0a
type = 0x800

[ IP ]

 version   = 4L
 ihl       = 5L
 tos       = 0x0
 len       = 86
 id        = 1
 flags     =
 frag      = 0L
 ttl       = 64
 proto     = tcp
 chksum    = 0xf94d
 src       = 192.168.0.1
 dst       = 192.168.0.2 -- should be 10.0.0.2
 \options   \

[ TCP ]

    sport     = 1234
    dport     = http
    seq       = 0
    ack       = 0
    dataofs   = 5L
    reserved  = 0L
    flags     = S
    window    = 8192
    chksum    = 0xe71c
    urgptr    = 0
    options   = []

[ Raw ]

       load      = 'DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD'

Can we use Floodlight Controller with LINK switch

I tried to use floodlight controller with LINC switch. As soon as the switch is started, after the two tap-link-ports were created messages, it is giving the message as "Connection to controller localhost:6633/0 closed because of bad_initial_message". I would like to know how to fix this.
Also I want to know more about Link switch, Is there any documents available to read?
Thanks
Mathi

Output/group is not terminal in apply actions

The intention of the Apply actions instructions is to mimic the original OpenFlow 1.0 behavior of flow entry actions. At that time the only possible way to do multicasting was to do multiple outputs in the action list. Something like: [… modify packet for output 1 …, output on port X, … modify packet for output 2, … output on port Y, … ]. In essence, whenever an output or group action is called from an apply actions instruction, a clone of the packet should be made, processed through the relevant port or group; and at the same time the original packet should continue its way in the pipeline.

In contrast, the ofs_userspace_routing:apply_action_list function stops processing, whenever it encounters an output or group action, while it should continue. (Note that that is the correct behavior for processing the action set at the end of the pipeline, but not for the apply actions.)

Flow entry counters key

The flow entry counters contain the operations in the key.Currently the counters key is not updated when a flow is modified. This leads to a crash when a packet is processed.
Even if the key is modified when a flow is modified there is a race between the update of the flow tables and the counters table can be updated.

Destination Host Not reachable error

Hi all,

I tried the Test-bed set up described in www.flowforwarding.org, I did the following steps:

1.Edited the /etc/network/interfaces file in VM2 and VM3 as

      VM2
     Auto lo
    Iface lo inet loopback
   Auto eth0
   Iface eth0 inet static
  Address 192.168.1.5                            for VM3 address 192.168.1.6
   Netmask 255.255.255.0

and restarted using sudo /etc/init.d/networking restart

 [ I didn't edit any thing in the /etc/network/interfaces file of domain 0. It contains only these lines: auto lo
iface lo inet loopback ]
  1. Edited the line vif=[‘ip=192.168.1.5’] in vm2.cfg and vif=[‘ip=192.168.1.6’] in vm3.cfg in the domain0

  2. Started the VM2 and VM3. Brctl has showed tmpbridge with vif2.0 and vif 3.0.

        root@roadrunner:/home/flow# xm list
      Name ID Mem VCPUs State Time(s)
      Domain-0 0 6776 8 r----- 122.4
     vm2 2 500 1 -b---- 173.8
      vm3 3 500 1 -b---- 1.8
    
    root@roadrunner:/home/flow# brctl show
    bridge name bridge id   STP enabled interfaces
    tmpbridge   8000.feffffffffff   no              vif2.0          vif3.0
    

4.Removed vif3.0 and vif4.0 from tmpbridge using brctl delif tmpbridge vif3.0

5.A shell script named createport.sh was made run to create tap interfaces, bridges and to connect tap interfaces with vifs.

              tunctl -t tap-linc-port1
              ifconfig tap-linc-port1 0.0.0.0 promisc up
              ifconfig vif2.0 0.0.0.0 promisc up
              brctl addbr br-linc1
              brctl addif br-linc1 tap-linc-port1
              brctl addif br-linc1 vif2.0
               ifconfig br-linc1 192.168.1.2 promisc up
               tunctl -t tap-linc-port2
              ifconfig tap-linc-port2 0.0.0.0 promisc up
               ifconfig vif3.0 0.0.0.0 promisc up
               brctl addbr br-linc2
               brctl addif br-linc2 tap-linc-port2
                brctl addif br-linc2 vif3.0
               ifconfig br-linc2 192.168.1.3 promisc up

   Now the brctl show output is:
        bridge name bridge id   STP enabled interfaces
        br-linc1    8000.feffffffffff   no  tap-linc-port1  vif2.0
        br-linc2    8000.feffffffffff   no  tap-linc-port2   vif3.0
        tmpbridge   8000.000000000000   no
The ifconfig -a output contains eth0, lo, br-linc1, br-linc2, tmpbridge, tap-link-port1, tap-linc-port2,vif2.0, vif 3.0 and wlan info.

6.ryu-manager simple_switch_v1_2.py was run in a terminal on dom0.

    root@roadrunner:/home/flow/ryu/ryu/app# ryu-manager simple_switch_v1_2.py
loading app ryu.controller.ofp_handler
l   oading app simple_switch_v1_2.py
instantiating app simple_switch_v1_2.py
instantiating app ryu.controller.ofp_handler

7.LINC_Switch was started

root@roadrunner:/home/flow/LINC-Switch# rel/linc/bin/linc console

Exec: /home/flow/LINC-Switch/rel/linc/erts-5.9.3.1/bin/erlexec -boot /home/flow/LINC-Switch/rel/linc/releases/1.0/linc -mode embedded -config /home/flow/LINC-Switch/rel/linc/releases/1.0/sys.config -args_file /home/flow/LINC-Switch/rel/linc/releases/1.0/vm.args -- console

Root: /home/flow/LINC-Switch/rel/linc

Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]

14:36:54.640 [info] Application lager started on node linc@roadrunner

14:36:54.641 [info] Application linc started on node linc@roadrunner

Eshell V5.9.3.1 (abort with ^G)

(linc@roadrunner)1> 14:36:54.663 [info] Created port: {1,[{interface,"tap-linc-port1"}]}

14:36:54.684 [info] Created port: {2,[{interface,"tap-linc-port2"}]}

14:36:54.691 [info] Connected to controller localhost:6633/0 using OFP v4

8.When ping from VM2 to VM3, it is saying destination unreachable.

root@vm3:~# ping 192.168.1.5
PING 192.168.1.5 (192.168.1.5) 56(84) bytes of data.
From 192.168.1.6 icmp_seq=1 Destination Host Unreachable
From 192.168.1.6 icmp_seq=2 Destination Host Unreachable
From 192.168.1.6 icmp_seq=3 Destination Host Unreachable

I tried to disable ipv6 by editing the sysctl.conf file and started again.
root@roadrunner:/etc# sysctl -p /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

iptables -L output is:
root@roadrunner:/etc# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-out vif3.0 --physdev-is-bridged
ACCEPT udp -- anywhere anywhere PHYSDEV match --physdev-in vif3.0 --physdev-is-bridged udp spt:bootpc dpt:bootps
ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-out vif3.0 --physdev-is-bridged
ACCEPT all -- 192.168.1.6 anywhere PHYSDEV match --physdev-in vif3.0 --physdev-is-bridged
ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-out vif2.0 --physdev-is-bridged
ACCEPT udp -- anywhere anywhere PHYSDEV match --physdev-in vif2.0 --physdev-is-bridged udp spt:bootpc dpt:bootps
ACCEPT all -- anywhere anywhere PHYSDEV match --physdev-out vif2.0 --physdev-is-bridged
ACCEPT all -- 192.168.1.5 anywhere PHYSDEV match --physdev-in vif2.0 --physdev-is-bridged
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@roadrunner:/etc#
ACCEPT all -- 192.168.1.5 anywhere PHYSDEV match --physdev-in vif2.0 --physdev-is-bridged
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@roadrunner:/etc#

Please, correct me where I am wrong.

Thanks

Gandhi

Coding guidelines

With numerous collaborators, we need to have a coding guidelines document. Most of it could be from Erlang standard coding guidelines and we can probably add a section for FlowForwarding specific. The following topics must be covered:

  1. Naming - how to name files, method/function/variable names including casing (lower/upper)
  2. Comments - how to comment code, documentation in comments, indentation, etc
  3. Functions & Function prototypes
  4. Statements, Variable naming/convention, blank lines, includes/imports
  5. How to document code so that auto documentation tools can pick it up.

get-config crashes LINC

Use Netconf console utility to get configuration.

# netconf-console --host=10.48.11.200 --port=1830 --user=linc --password=linc --get-config

This works. I get a the OF Capable Switch configuration.

Now, I want to edit the Controller IP address.

# netconf-console --host=10.48.11.200 --port=1830 --user=linc --password=linc --edit-config=carl.xml 

# more carl.xml 
    <capable-switch xmlns="urn:onf:of111:config:yang">
      <id>CapableSwitch0</id>
      <logical-switches>
        <switch>
          <id>LogicalSwitch0</id>
          <datapath-id>7A:AC:DF:F0:3A:F2:00:00</datapath-id>
          <controllers>
            <controller>
              <id>Switch0-DefaultController</id>
              <ip-address>10.48.11.200</ip-address>
              <port>6633</port>
              <protocol>tcp</protocol>
            </controller>
          </controllers>
        </switch>
      </logical-switches>
    </capable-switch>
#

LINC crashes: Console output

02:13:09.171 [error] gen_server linc_ofconfig terminated with reason: no function clause matching linc_ofconfig:'-get_controllers/1-fun-0-'(ok, []) line 1123
02:13:09.326 [error] CRASH REPORT Process linc_ofconfig with 0 neighbours exited with reason: no function clause matching linc_ofconfig:'-get_controllers/1-fun-0-'(ok, []) line 1123 in gen_server:terminate/6 line 747
02:13:09.357 [error] Supervisor linc_capable_sup had child linc_ofconfig started with linc_ofconfig:start_link() at <0.119.0> exit with reason no function clause matching linc_ofconfig:'-get_controllers/1-fun-0-'(ok, []) line 1123 in context child_terminated
02:13:09.368 [info] SSH connection with subsystem: enetconf_ssh terminated with state: {state,<0.2493.0>,0,5,enetconf_fm_chunked,{chunk_parser,<<>>},linc_ofconfig}
02:13:09.368 [error] gen_server <0.2495.0> terminated with reason: {{function_clause,[{linc_ofconfig,'-get_controllers/1-fun-0-',[ok,[]],[{file,"src/linc_ofconfig.erl"},{line,1123}]},{lists,foldl,3,[{file,"lists.erl"},{line,1197}]},{linc_ofconfig,get_config,1,[{file,"src/linc_ofconfig.erl"},{line,180}]},{linc_ofconfig,'-get_capable_switch_config/1-lc$^0/1-0-',1,[{file,"src/linc_ofconfig.erl"},{line,611}]},{linc_ofconfig,get_capable_switch_config,1,[{file,"src/linc_ofconfig.erl"},{line,611}]},{linc_ofconfig,handle_call,3,[{file,"src/linc_ofconfig.erl"},{line,...}]},...]},...}
02:13:09.379 [error] CRASH REPORT Process <0.2495.0> with 0 neighbours exited with reason: {{function_clause,[{linc_ofconfig,'-get_controllers/1-fun-0-',[ok,[]],[{file,"src/linc_ofconfig.erl"},{line,1123}]},{lists,foldl,3,[{file,"lists.erl"},{line,1197}]},{linc_ofconfig,get_config,1,[{file,"src/linc_ofconfig.erl"},{line,180}]},{linc_ofconfig,'-get_capable_switch_config/1-lc$^0/1-0-',1,[{file,"src/linc_ofconfig.erl"},{line,611}]},{linc_ofconfig,get_capable_switch_config,1,[{file,"src/linc_ofconfig.erl"},{line,611}]},{linc_ofconfig,handle_call,3,[{file,"src/linc_ofconfig.erl"},{line,...}]},...]},...} in gen_server:terminate/6 line 747
02:13:09.390 [error] Supervisor ssh_channel_sup had child #Ref<0.0.0.1223> started with {ssh_channel,start_link,undefined} at <0.2495.0> exit with reason {{function_clause,[{linc_ofconfig,'-get_controllers/1-fun-0-',[ok,[]],[{file,"src/linc_ofconfig.erl"},{line,1123}]},{lists,foldl,3,[{file,"lists.erl"},{line,1197}]},{linc_ofconfig,get_config,1,[{file,"src/linc_ofconfig.erl"},{line,180}]},{linc_ofconfig,'-get_capable_switch_config/1-lc$^0/1-0-',1,[{file,"src/linc_ofconfig.erl"},{line,611}]},{linc_ofconfig,get_capable_switch_config,1,[{file,"src/linc_ofconfig.erl"},{line,611}]},{linc_ofconfig,handle_call,3,[{file,"src/linc_ofconfig.erl"},{line,...}]},...]},...} in context child_terminated
02:13:09.401 [debug] Supervisor linc_capable_sup started linc_ofconfig:start_link() at pid <0.2496.0>

Dependencies are not updated correctly

Project dependencies downloaded by rebar are fetched, but not merged. This means that if of_config was updated and one goes to deps/of_config, it's still in the old revision, thus false impression that one runs the latest switch version may be created, leading to confusion.

Ping example - part 3 - I can't remove flow

Need help please for this bug on https://github.com/FlowForwarding/LINC-Switch/blob/master/docs/example-ping.md

Firstly. this is my Linc config from "git diff" (only the switch is modified) :
https://gist.github.com/mikefaille/5472249

This is my flow activation command (using table 1) :
https://gist.github.com/mikefaille/5472251

(not showing all step there.. ) After creating my flow we can see from my switch (ping pass using prebuild one : pcap.data/ping.pcap ) :
IP (tos 0x0, ttl 64, id 39324, offset 0, flags [none], proto ICMP (1), length 84) 10.152.0.118 > sg1.any.onet.pl: ICMP echo request, id 12814, seq 0, length 6

Flow list from table one on my swich :
(linc@linux-ke2m)17> ets:tab2list(linc:lookup(0, flow_table_1)). [{flow_entry,{1,#Ref<0.0.0.399>}, 1, {ofp_match,[{ofp_field,openflow_basic,in_port,false, <<0,0,0,1>>, undefined}]}, <<0,0,0,0,0,0,0,0>>, [], {1367,47307,639324}, {infinity,0,0}, {infinity,0,0}, [{ofp_instruction_write_actions,4, [{ofp_action_output,16,2,64}]}]}]

This my flow deletion command (using table 1) :
https://gist.github.com/mikefaille/5472253

I try to disable the flow (from controler) :
of_controller_v4:send(CtrlPid, Conn, RemoveFlows).

but, when I try to list config from the switch, I see the see output that show flow activation..

Thank you

Crash on get-config with empty filter

During some interoperability testing between a client implementation and the LINC NETCONF server, we found a way to crash the server with an edit-config operation with an empty subtree filter.

We managed to provoke a crash by doing a get-config using an empty filter statement. The first RPC content that triggered it is this:

 <get-config>
   <source>
     <running/>
   </source>
   <filter/>
 </get-config>
</rpc>

We then removed the filter element:

 <get-config>
   <source>
     <running/>
   </source>
 </get-config>
</rpc>

...and it didn't crash.
We then added a non-empty filter:

<get-config>
   <source>
     <running/>
   </source>
   <filter type="subtree">
     <top xmlns="urn:onf:of111:config:yang"/>
   </filter>
 </get-config>

...and it didn't crash.
We then added another version of empty filter:

<get-config>
   <source>
     <running/>
   </source>
   <filter type="subtree">
   <filter></filter>
 </get-config>

...and it crashed.

So, in summary. It is likely that an empty filter element is the reason for the behaviour.

Duplicated packets on hardware interfaces - epcap

When LINC is connected to hardware interrface such as eth0, one can observe duplicated packets delivered by epcap application.

It looks like epcap delivers again packets that it itself injects to the network stack.

There is a -I option in epcap that should in theory solve this issue, but apparenty it doesn't work.

[epcap] epcap not starting properly when eth interface has no ipv4 address

When starting LINC on a eth-only setup (without taps and bridges), epcap does not start if interface doesn't have ipv4 address assigned (even a fake one). If you copy the command line and run it manually with -v (verbose) option, it prints something like "ethX: ipv4 address not assigned" and quits.

OpenFlow 1.3.1 remove all flows and flow_stats

We ( Luxoft Twister team ) tried a few OpenFlow 1.3.1 conformance tests against LINC and noticed some issues.

Here is one test scenario:

  1. Insert a flow_mod that output to port.
  2. Delete all flows ( send a flow_mod with OFPFC_DELETE command that matches all flows ).
  3. Request flow_stats in order to verify the flow is removed.

Results:

  1. Flowmod is inserted.
  2. The switch seems to ignore the command and did not remove the flow ( I verified this injecting a packet that matches the removed flow, also no error received ).
  3. Switch did not reply to flow_stats request ( also no error message received ).

Debug info:

Flow_mod that output to port:

Openflow Protocol
Header
Version: 0x04
Type: Flow mod (CSM) - OFPT_FLOW_MOD (14)
Length: 88
Transaction ID: 2169900000
Flow Mod
Cookie: 0x0000000000000000
Cookie Mask: 0x0000000000000000
Table ID: 0
Command: New flow - OFPFC_ADD (0x00)
Idle Timeout: 0
Hard Timeout: 0
Priority: 4000
Buffer ID: 0xffffffff
Output Port: 4294967295
Output Group: 4294967295
Flags: 0x0000
0000 0000 0000 0... = Reserved: Not set
.... .... .... ...0 = Send flow removed message when flow expires or is deleted: Not set
.... .... .... ..0. = Check for overlapping entries first: Not set
.... .... .... .0.. = Reset flow packet and byte counts: Not set
Padding
Match
Type: OpenFlow Extensible Match - OFPMT_OXM (0x0001)
Length: 10
OXM field
Class: Basic class for OpenFlow - OFPXMC_OPENFLOW_BASIC (0x8000)
0000 101. = Field: Ethernet frame type - OFPXMT_OFB_ETH_TYPE (0x05)
0 = Has mask: No
Length: 2
Value: 0800
Padding
Instruction
Type: Applies the action(s) immediately - OFPIT_APPLY_ACTIONS (0x0004)
Length: 24
Padding
Action
Type: Output to switch port - OFPAT_OUTPUT (0x0000)
Length: 16
Port: 4294967293
Max Length: 65535
Padding

Flow_mod with delete command:

Openflow Protocol
Header
Version: 0x04
Type: Flow mod (CSM) - OFPT_FLOW_MOD (14)
Length: 56
Transaction ID: 970498230
Flow Mod
Cookie: 0x0000000000000000
Cookie Mask: 0x0000000000000000
Table ID: 255
Command: Delete all matching flows - OFPFC_DELETE (0x03)
Idle Timeout: 0
Hard Timeout: 0
Priority: 32768
Buffer ID: 0xffffffff
Output Port: 4294967295
Output Group: 4294967295
Flags: 0x0000
0000 0000 0000 0... = Reserved: Not set
.... .... .... ...0 = Send flow removed message when flow expires or is deleted: Not set
.... .... .... ..0. = Check for overlapping entries first: Not set
.... .... .... .0.. = Reset flow packet and byte counts: Not set
Padding
Match
Type: OpenFlow Extensible Match - OFPMT_OXM (0x0001)
Length: 8
Padding

Multipart flow_stats requested to switch:

Openflow Protocol
Header
Version: 0x04
Type: Multipart request (CSM) - OFPT_MULTIPART_REQUEST (18)
Length: 56
Transaction ID: 342499105
Multipart request
Type: Individual flow statistics - OFPMP_FLOW (1)
Flags: 0x0000
.... .... .... ...0 = More requests to follow: Not set
Padding
Body: ff000000ffffffffffffffff000000000000000000000000...

OpenFlow 1.3.1 bad multipart type error message

Tested with Luxoft's Twister framework, OpenFlow 1.3.1 module:

Test scenario:

  1. Send a multipart request that have a bad type set.
  2. Expect error message from switch ( OFPBRC_BAD_MULTIPART ).

Test results:

Switch did not reply.

Debug info:

Multipart request:

Openflow Protocol
Header
Version: 0x04
Type: Multipart request (CSM) - OFPT_MULTIPART_REQUEST (18)
Length: 16
Transaction ID: 2112248390
Multipart request
Type: Unknown (90)
Flags: 0x0000
.... .... .... ...0 = More requests to follow: Not set
Padding

Add srcrpm, srczip targets to Makefile

Add Makefile targets - srcrpm and srczip so that one can create a Source package with all dependencies so that one can build LINC offline.

Also, the default build target must be building offline and only when forced, they should get/update all dependencies and source.

Running "make test" reports error

I am trying to setup the basic ping test. I have two tap interfaces on one Ubuntu Server 12.04 VM and both tap interfaces are added to the sys.config file. Here is the sys.config that I am using

[
 {of_switch,
  [
   {controllers,
    [
        {"localhost", 6633}
    ]},
   {ports,
    [
        {1, [
             {rate, {100, mbps}},
             {queues, []}
            ]},
        {2, [
             {rate, {100, mbps}},
             {queues, []}
            ]}
    ]},
   {backends,
    [
     {userspace, [
                  {ports,
                   [
                       {1, [{interface, "tap0"}]},
                       {2, [{interface, "tap1"}]}
                   ]}
                 ]}
    ]}
  ]},
 {lager,
  [
   {handlers,
    [
     {lager_console_backend, info},
     {lager_file_backend,
      [
       {"log/error.log", error, 10485760, "$D0", 5},
       {"log/console.log", info, 10485760, "$D0", 5}
      ]}
    ]}
  ]},
 {sasl,
  [
   {sasl_error_logger, {file, "log/sasl-error.log"}},
   {errlog_type, error},
   {error_logger_mf_dir, "log/sasl"},      % Log directory
   {error_logger_mf_maxbytes, 10485760},   % 10 MB max file size
   {error_logger_mf_maxfiles, 5}           % 5 files max
  ]}
].

When running "make test" from command line port test in of_switch(eunit) reports failure.
Here is the output from "make test"

@ubu-vm3:~/linc-testing/LINC-Switch$ make test
git config --global http.sslVerify false
./rebar get-deps compile
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/lager'
==> lager (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/lager'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/of_protocol'
==> of_protocol (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/of_protocol'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/meck'
==> meck (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/meck'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/pkt'
==> pkt (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/pkt'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket'
==> procket (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/epcap'
==> epcap (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/epcap'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/tunctl'
==> tunctl (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/tunctl'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/apps/of_switch'
==> of_switch (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/apps/of_switch'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/rel'
==> rel (get-deps)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/rel'
==> LINC-Switch (get-deps)
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/lager'
==> lager (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/lager'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/of_protocol'
==> of_protocol (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/of_protocol'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/meck'
==> meck (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/meck'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/pkt'
==> pkt (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/pkt'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket'
==> procket (compile)
make[1]: Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket/c_src'
gcc -m64 -g -Wall -o ../priv/procket -L. procket_cmd.c -lancillary
make[1]: Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket/c_src'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/epcap'
==> epcap (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/epcap'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/tunctl'
==> tunctl (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/tunctl'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/apps/of_switch'
==> of_switch (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/apps/of_switch'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/rel'
==> rel (compile)
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/rel'
==> LINC-Switch (compile)
./rebar skip_deps=true eunit
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/lager'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/lager'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/of_protocol'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/of_protocol'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/meck'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/meck'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/pkt'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/pkt'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/procket'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/epcap'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/epcap'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/deps/tunctl'
==> Leaving directory `/home/mcladmin/linc-testing/LINC-Switch/deps/tunctl'
==> Entering directory `/home/mcladmin/linc-testing/LINC-Switch/apps/of_switch'
==> of_switch (eunit)
10:45:39.490 [error] CRASH REPORT Process <0.513.0> with 0 neighbours exited with reason: no function clause matching ofs_userspace_port:init([{interface,"zxc5"},{ip,"10.0.0.0.1"},{ofs_port_no,1},{rate,{10,kbps}},{queues,[{0,[]}]}]) line 210 in gen_server:init_it/6 line 328
switch_tests: port_test...*failed*
::{case_clause,
    {error,
        {function_clause,
            [{ofs_userspace_port,init,
                 [[{interface,"zxc5"},
                   {ip,"10.0.0.0.1"},
                   {ofs_port_no,1},
                   {rate,{10,kbps}},
                   {queues,[{...}]}]],
                 [{file,"src/ofs_userspace_port.erl"},{line,210}]},
             {gen_server,init_it,6,[{file,"gen_server.erl"},{line,304}]},
             {proc_lib,init_p_do_apply,3,
                 [{file,"proc_lib.erl"},{line,227}]}]}}}


=======================================================
  Failed: 1.  Skipped: 0.  Passed: 20.
10:45:39.549 [error] gen_server ofs_userspace_port_procket_meck terminated with reason: no match of right hand value {error,{cant_open_file,"ofs_userspace_port_procket_meck_original.coverdata",enoent}} in meck:import_original_cover/2 line 726
10:45:39.593 [error] CRASH REPORT Process ofs_userspace_port_procket_meck with 0 neighbours exited with reason: no match of right hand value {error,{cant_open_file,"ofs_userspace_port_procket_meck_original.coverdata",enoent}} in meck:import_original_cover/2 line 726 in gen_server:terminate/6 line 725
Cover analysis: /home/mcladmin/linc-testing/LINC-Switch/apps/of_switch/.eunit/index.html

Code Coverage:
gen_switch                 : not
of_controller              : 69%
ofs_app                    : 100
ofs_logic                  : 37%
ofs_receiver               : 50%
ofs_receiver_sup           : 100
ofs_sup                    : 100
ofs_tests                  : 89%
ofs_userspace              : 69%
ofs_userspace_convert      :  0%
ofs_userspace_flow         : 16%
ofs_userspace_port         :  5%
ofs_userspace_port_procket :  0%
ofs_userspace_port_sup     : 100
ofs_userspace_queue        :  0%
ofs_userspace_queue_sup    : 75%
ofs_userspace_routing      : 67%
ofs_userspace_stats        : 21%
sliding_window             :  0%
switch_tests               : 81%

Total                      : 51%

=INFO REPORT==== 12-Aug-2012::10:45:41 ===
    application: lager
    exited: stopped
    type: permanent

=INFO REPORT==== 12-Aug-2012::10:45:41 ===
    application: syntax_tools
    exited: stopped
    type: permanent

=INFO REPORT==== 12-Aug-2012::10:45:41 ===
    application: compiler
    exited: stopped
    type: permanent
ERROR: One or more eunit tests failed.
make: *** [test] Error 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.