summaryrefslogtreecommitdiffstats
path: root/src/vnet/ip/ip_frag.c
AgeCommit message (Collapse)AuthorFilesLines
2019-02-09buffers: fix typoDamjan Marion1-1/+1
Change-Id: I4e836244409c98739a13092ee252542a2c5fe259 Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-02-06buffers: make buffer data size configurable from startup configDamjan Marion1-1/+2
Example: buffers { default data-size 1536 } Change-Id: I5b4436850ca18025c9fdcfc7ed648c2c2732d660 Signed-off-by: Damjan Marion <damarion@cisco.com>
2019-01-20buffers: don't init metadata, as it is already initializedDamjan Marion1-3/+0
Change-Id: Ia083050389853c25b069f0f8286d50d3f4aef527 Signed-off-by: Damjan Marion <damarion@cisco.com>
2018-12-03Copying QoS Bits when fragmented, so that marking can happen properly also ↵Vijayabhaskar Katamreddy1-0/+7
cleaning up some unused code Change-Id: I1558eec79af173e5cdcc769d7c3909039403eed8 Signed-off-by: Vijayabhaskar Katamreddy <vkatamre@cisco.com>
2018-11-14Remove c-11 memcpy checks from perf-critical codeDave Barach1-4/+4
Change-Id: Id4f37f5d4a03160572954a416efa1ef9b3d79ad1 Signed-off-by: Dave Barach <dave@barachs.net>
2018-10-22Fix buffer overflow when fragmenting packets (VPP-1383)Juraj Sloboda1-2/+3
Change-Id: Idcda9ae55fa2efb0b2e928bac3e8e86ff8d19eba Signed-off-by: Juraj Sloboda <jsloboda@cisco.com>
2018-09-27IPIP and IPv6 fragmentationOle Troan1-277/+185
- Error where ICMPv6 error code doesn't reset VLIB_TX = -1 Leading to crash for ICMP generated on tunnelled packets - Missed setting VNET_BUFFER_F_LOCALLY_ORIGINATED, so IP in IPv6 packets never got fragmented. - Add support for fragmentation of buffer chains. - Remove support for inner fragmentation in frag code itself. Change-Id: If9a97301b7e35ca97ffa5c0fada2b9e7e7dbfb27 Signed-off-by: Ole Troan <ot@cisco.com>
2018-08-17VPP-1392: VXLAN fails with IP fragmentationOle Troan1-0/+2
Not only is it wasteful to send all fragments back through ip4-lookup, but it doesn't work with tunnel mechanisms that don't have IP enabled on their payload side. Change-Id: Ic92d95982dddaa70969a2a6ea2f98edec7614425 Signed-off-by: Ole Troan <ot@cisco.com>
2018-08-10IP fragmentation buffer chains, part 2.Ole Troan1-19/+21
Change-Id: I8d1072cf9ff9f502302fd906c5590e0f3698dc60 Signed-off-by: Ole Troan <ot@cisco.com>
2018-08-10IP fragmentation to handle buffer chains.Ole Troan1-79/+106
Change-Id: Iff557f566ebc9ab170d75da1233997d83b8c8a66 Signed-off-by: Ole Troan <ot@cisco.com>
2018-07-30Reverse the logic of flagging malformed packet in fragmentation code to ↵Rajesh Saluja1-1/+1
allow padding Change-Id: I051c137ae18fd436a798a12a56a9d12f8eaa2e08 Signed-off-by: Rajesh Saluja <rajsaluj@cisco.com>
2018-06-29Removing the static keyword do_fragment routines, so that could be accessed ↵Vijayabhaskar Katamreddy1-2/+2
outside the ip_frag nodes Change-Id: I46d3d10fa763fcf7a579620ec7cf1b204a53bce8 Signed-off-by: Vijayabhaskar Katamreddy <vkatamre@cisco.com>
2018-06-14MTU: IP fragmentation added to ip4-rewrite and ip6-rewriteOle Troan1-0/+12
Change-Id: Ibae260273f25a319153be37470aed49ff73e957a Signed-off-by: Ole Troan <ot@cisco.com>
2018-01-29DRAFT ip4/6_frag to support DPO Style based Next NodeVijayabhaskar Katamreddy1-0/+14
Change-Id: I1df3d23c1c5668b83d52b41f51c0e3f24183af9e Signed-off-by: Vijayabhaskar Katamreddy <vkatamre@cisco.com>
2017-12-15Fix icmp/udp/tcp punt/drop pathsVijayabhaskar Katamreddy1-11/+14
Send packets to ip4/6_punt/drop nodes instead of error-drop/punt nodes dbarach: clean up an annoying checkstyle issue: indent 2.2.10 (OpenSUSE version) and indent 2.2.11 (Ubuntu / CentOS versions) had an artistic disagreement about ip_frag.c. Change-Id: I660bee28a064af9c6c70371363081e941d1c3a94 Signed-off-by: Vijayabhaskar Katamreddy <vkatamre@cisco.com> Signed-off-by: Dave Barach <dave@barachs.net>
2016-12-28Reorganize source tree to use single autotools instanceDamjan Marion1-0/+581
Change-Id: I7b51f88292e057c6443b12224486f2d0c9f8ae23 Signed-off-by: Damjan Marion <damarion@cisco.com>
color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */ }
#!/usr/bin/env python

# Copyright (c) 2019 Cisco and/or its affiliates.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""This script provides cleanup routines on all DUTs."""

import argparse
import sys
from platform import dist
from yaml import load

from resources.libraries.python.ssh import SSH


def execute_command_ssh(ssh, cmd, sudo=False):
    """Execute a command over ssh channel, and print outputs.

    :param ssh: SSH() object connected to a node.
    :param cmd: Command line to execute on remote node.
    :param sudo: Run command with sudo privilege level..
    :type ssh: SSH() object
    :type cmd: str
    :type sudo: bool
    :returns return_code, stdout, stderr
    :rtype: tuple(int, str, str)
    """
    if sudo:
        ret, stdout, stderr = ssh.exec_command_sudo(cmd, timeout=60)
    else:
        ret, stdout, stderr = ssh.exec_command(cmd, timeout=60)

    print 'Executing: {cmd}'.format(cmd=cmd)
    print '({ret}) {stdout} {stderr}'.format(ret=ret, stdout=stdout,
                                             stderr=stderr)

    return ret, stdout, stdout

def uninstall_package(ssh, package):
    """If there are packages installed, clean them up.

    :param ssh: SSH() object connected to a node.
    :param package: Package name.
    :type ssh: SSH() object
    :type package: str
    """
    if dist()[0] == 'Ubuntu':
        ret, _, _ = ssh.exec_command("dpkg -l | grep {package}".format(
            package=package))
        if ret == 0:
            # Try to fix interrupted installations first.
            execute_command_ssh(ssh, 'dpkg --configure -a', sudo=True)
            # Try to remove installed packages
            execute_command_ssh(ssh, 'apt-get purge -y "{package}.*"'.format(
                package=package), sudo=True)

def kill_process(ssh, process):
    """If there are running processes, kill them.

    :param ssh: SSH() object connected to a node.
    :param process: Process name.
    :type ssh: SSH() object
    :type process: str
    """
    execute_command_ssh(ssh, 'killall -v -s 9 {process}'.format(
        process=process), sudo=True)


def main():
    """Testbed cleanup."""

    parser = argparse.ArgumentParser()
    parser.add_argument("-t", "--topo", required=True, help="Topology file")

    args = parser.parse_args()
    topology_file = args.topo

    topology = load(open(topology_file).read())['nodes']

    ssh = SSH()
    for node in topology:
        if topology[node]['type'] == "DUT":
            print "###TI host: {}".format(topology[node]['host'])
            ssh.connect(topology[node])

            # Kill processes.
            kill_process(ssh, 'qemu')
            kill_process(ssh, 'l3fwd')
            kill_process(ssh, 'testpmd')

            # Uninstall packages
            uninstall_package(ssh, 'vpp')
            uninstall_package(ssh, 'honeycomb')

            # Remove HC logs.
            execute_command_ssh(ssh, 'rm -rf /var/log/honeycomb',
                                sudo=True)

            # Kill all containers.
            execute_command_ssh(ssh, 'docker rm --force $(sudo docker ps -q)',
                                sudo=True)

            # Destroy kubernetes.
            execute_command_ssh(ssh, 'kubeadm reset --force',
                                sudo=True)

            # Remove corefiles leftovers.
            execute_command_ssh(ssh, 'rm -f /tmp/*tar.lzo.lrz.xz*',
                                sudo=True)

            # Remove corefiles leftovers.
            execute_command_ssh(ssh, 'rm -f /tmp/*core*',
                                sudo=True)


if __name__ == "__main__":
    sys.exit(main())