* [dpdk-dev] [PATCH 00/16] recipes for RPM packages
@ 2014-02-04 15:54 Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script Thomas Monjalon
` (15 more replies)
0 siblings, 16 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
The goal of this patch serie is to be able to package DPDK
for RPM-based distributions.
Note that there is neither DKMS nor AKMOD support and
that rpmlint complains about few things.
But it is a first step to start thinking about packaging.
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-02-24 16:03 ` Chris Wright
2014-02-04 15:54 ` [dpdk-dev] [PATCH 02/16] virtio: rename library Thomas Monjalon
` (14 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
In order to make this tool available among other system commands,
the name must be more specific.
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
tools/igb_uio_bind.py | 485 +++++++++++++++++++++++++++++++++++++++++++++++++
tools/pci_unbind.py | 485 -------------------------------------------------
tools/setup.sh | 16 +-
3 files changed, 493 insertions(+), 493 deletions(-)
create mode 100755 tools/igb_uio_bind.py
delete mode 100755 tools/pci_unbind.py
diff --git a/tools/igb_uio_bind.py b/tools/igb_uio_bind.py
new file mode 100755
index 0000000..528999a
--- /dev/null
+++ b/tools/igb_uio_bind.py
@@ -0,0 +1,485 @@
+#! /usr/bin/python
+#
+# BSD LICENSE
+#
+# Copyright(c) 2010-2013 Intel Corporation. All rights reserved.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Intel Corporation nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+import sys, os, getopt, subprocess
+from os.path import exists, abspath, dirname, basename
+
+
+# The PCI device class for ETHERNET devices
+ETHERNET_CLASS = "0200"
+
+# global dict ethernet devices present. Dictionary indexed by PCI address.
+# Each device within this is itself a dictionary of device properties
+devices = {}
+# list of vendor:device pairs (again stored as dictionary) supported by igb_uio
+module_dev_ids = []
+
+def usage():
+ '''Print usage information for the program'''
+ argv0 = basename(sys.argv[0])
+ print """
+Usage:
+------
+
+ %(argv0)s [options] DEVICE1 DEVICE2 ....
+
+where DEVICE1, DEVICE2 etc, are specified via PCI "domain:bus:slot.func" syntax
+or "bus:slot.func" syntax. For devices bound to Linux kernel drivers, they may
+also be referred to by Linux interface name e.g. eth0, eth1, em0, em1, etc.
+
+Options:
+ --help, --usage:
+ Display usage information and quit
+
+ --status:
+ Print the current status of all known network interfaces.
+ For each device, it displays the PCI domain, bus, slot and function,
+ along with a text description of the device. Depending upon whether the
+ device is being used by a kernel driver, the igb_uio driver, or no
+ driver, other relevant information will be displayed:
+ * the Linux interface name e.g. if=eth0
+ * the driver being used e.g. drv=igb_uio
+ * any suitable drivers not currently using that device
+ e.g. unused=igb_uio
+ NOTE: if this flag is passed along with a bind/unbind option, the status
+ display will always occur after the other operations have taken place.
+
+ -b driver, --bind=driver:
+ Select the driver to use or \"none\" to unbind the device
+
+ -u, --unbind:
+ Unbind a device (Equivalent to \"-b none\")
+
+ --force:
+ By default, devices which are used by Linux - as indicated by having
+ routes in the routing table - cannot be modified. Using the --force
+ flag overrides this behavior, allowing active links to be forcibly
+ unbound.
+ WARNING: This can lead to loss of network connection and should be used
+ with caution.
+
+Examples:
+---------
+
+To display current device status:
+ %(argv0)s --status
+
+To bind eth1 from the current driver and move to use igb_uio
+ %(argv0)s --bind=igb_uio eth1
+
+To unbind 0000:01:00.0 from using any driver
+ %(argv0)s -u 0000:01:00.0
+
+To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver
+ %(argv0)s -b ixgbe 02:00.0 02:00.1
+
+ """ % locals() # replace items from local variables
+
+# This is roughly compatible with check_output function in subprocess module
+# which is only available in python 2.7.
+def check_output(args, stderr=None):
+ '''Run a command and capture its output'''
+ return subprocess.Popen(args, stdout=subprocess.PIPE,
+ stderr=stderr).communicate()[0]
+
+def find_module(mod):
+ '''find the .ko file for kernel module named mod.
+ Searches the $RTE_SDK/$RTE_TARGET directory, the kernel
+ modules directory and finally under the parent directory of
+ the script '''
+ # check $RTE_SDK/$RTE_TARGET directory
+ if 'RTE_SDK' in os.environ and 'RTE_TARGET' in os.environ:
+ path = "%s/%s/kmod/%s.ko" % (os.environ['RTE_SDK'],\
+ os.environ['RTE_TARGET'], mod)
+ if exists(path):
+ return path
+
+ # check using depmod
+ try:
+ depmod_out = check_output(["modinfo", "-n", mod], \
+ stderr=subprocess.STDOUT).lower()
+ if "error" not in depmod_out:
+ path = depmod_out.strip()
+ if exists(path):
+ return path
+ except: # if modinfo can't find module, it fails, so continue
+ pass
+
+ # check for a copy based off current path
+ tools_dir = dirname(abspath(sys.argv[0]))
+ if (tools_dir.endswith("tools")):
+ base_dir = dirname(tools_dir)
+ find_out = check_output(["find", base_dir, "-name", mod + ".ko"])
+ if len(find_out) > 0: #something matched
+ path = find_out.splitlines()[0]
+ if exists(path):
+ return path
+
+def check_modules():
+ '''Checks that the needed modules (igb_uio) is loaded, and then
+ determine from the .ko file, what its supported device ids are'''
+ global module_dev_ids
+
+ fd = file("/proc/modules")
+ loaded_mods = fd.readlines()
+ fd.close()
+ mod = "igb_uio"
+
+ # first check if module is loaded
+ found = False
+ for line in loaded_mods:
+ if line.startswith(mod):
+ found = True
+ break
+ if not found:
+ print "Error - module %s not loaded" %mod
+ sys.exit(1)
+
+ # now find the .ko and get list of supported vendor/dev-ids
+ modpath = find_module(mod)
+ if modpath is None:
+ print "Cannot find module file %s" % (mod + ".ko")
+ sys.exit(1)
+ depmod_output = check_output(["depmod", "-n", modpath]).splitlines()
+ for line in depmod_output:
+ if not line.startswith("alias"):
+ continue
+ if not line.endswith(mod):
+ continue
+ lineparts = line.split()
+ if not(lineparts[1].startswith("pci:")):
+ continue;
+ else:
+ lineparts[1] = lineparts[1][4:]
+ vendor = lineparts[1][:9]
+ device = lineparts[1][9:18]
+ if vendor.startswith("v") and device.startswith("d"):
+ module_dev_ids.append({"Vendor": int(vendor[1:],16),
+ "Device": int(device[1:],16)})
+
+def is_supported_device(dev_id):
+ '''return true if device is supported by igb_uio, false otherwise'''
+ for dev in module_dev_ids:
+ if (dev["Vendor"] == devices[dev_id]["Vendor"] and
+ dev["Device"] == devices[dev_id]["Device"]):
+ return True
+ return False
+
+def has_driver(dev_id):
+ '''return true if a device is assigned to a driver. False otherwise'''
+ return "Driver_str" in devices[dev_id]
+
+def get_nic_details():
+ '''This function populates the "devices" dictionary. The keys used are
+ the pci addresses (domain:bus:slot.func). The values are themselves
+ dictionaries - one for each NIC.'''
+ global devices
+
+ # clear any old data
+ devices = {}
+ # first loop through and read details for all devices
+ # request machine readable format, with numeric IDs
+ dev = {};
+ dev_lines = check_output(["lspci", "-Dvmmn"]).splitlines()
+ for dev_line in dev_lines:
+ if (len(dev_line) == 0):
+ if dev["Class"] == ETHERNET_CLASS:
+ #convert device and vendor ids to numbers, then add to global
+ dev["Vendor"] = int(dev["Vendor"],16)
+ dev["Device"] = int(dev["Device"],16)
+ devices[dev["Slot"]] = dict(dev) # use dict to make copy of dev
+ else:
+ name, value = dev_line.split("\t", 1)
+ dev[name.rstrip(":")] = value
+
+ # check what is the interface if any for an ssh connection if
+ # any to this host, so we can mark it later.
+ ssh_if = []
+ route = check_output(["ip", "-o", "route"])
+ # filter out all lines for 169.254 routes
+ route = "\n".join(filter(lambda ln: not ln.startswith("169.254"),
+ route.splitlines()))
+ rt_info = route.split()
+ for i in xrange(len(rt_info) - 1):
+ if rt_info[i] == "dev":
+ ssh_if.append(rt_info[i+1])
+
+ # based on the basic info, get extended text details
+ for d in devices.keys():
+ extra_info = check_output(["lspci", "-vmmks", d]).splitlines()
+ # parse lspci details
+ for line in extra_info:
+ if len(line) == 0:
+ continue
+ name, value = line.split("\t", 1)
+ name = name.strip(":") + "_str"
+ devices[d][name] = value
+ # check for a unix interface name
+ sys_path = "/sys/bus/pci/devices/%s/net/" % d
+ if exists(sys_path):
+ devices[d]["Interface"] = ",".join(os.listdir(sys_path))
+ else:
+ devices[d]["Interface"] = ""
+ # check if a port is used for ssh connection
+ devices[d]["Ssh_if"] = False
+ devices[d]["Active"] = ""
+ for _if in ssh_if:
+ if _if in devices[d]["Interface"].split(","):
+ devices[d]["Ssh_if"] = True
+ devices[d]["Active"] = "*Active*"
+ break;
+
+ # add igb_uio to list of supporting modules if needed
+ if is_supported_device(d):
+ if "Module_str" in devices[d]:
+ if "igb_uio" not in devices[d]["Module_str"]:
+ devices[d]["Module_str"] = devices[d]["Module_str"] + ",igb_uio"
+ else:
+ devices[d]["Module_str"] = "igb_uio"
+ if "Module_str" not in devices[d]:
+ devices[d]["Module_str"] = "<none>"
+ # make sure the driver and module strings do not have any duplicates
+ if has_driver(d):
+ modules = devices[d]["Module_str"].split(",")
+ if devices[d]["Driver_str"] in modules:
+ modules.remove(devices[d]["Driver_str"])
+ devices[d]["Module_str"] = ",".join(modules)
+
+def dev_id_from_dev_name(dev_name):
+ '''Take a device "name" - a string passed in by user to identify a NIC
+ device, and determine the device id - i.e. the domain:bus:slot.func - for
+ it, which can then be used to index into the devices array'''
+ dev = None
+ # check if it's already a suitable index
+ if dev_name in devices:
+ return dev_name
+ # check if it's an index just missing the domain part
+ elif "0000:" + dev_name in devices:
+ return "0000:" + dev_name
+ else:
+ # check if it's an interface name, e.g. eth1
+ for d in devices.keys():
+ if dev_name in devices[d]["Interface"].split(","):
+ return devices[d]["Slot"]
+ # if nothing else matches - error
+ print "Unknown device: %s. " \
+ "Please specify device in \"bus:slot.func\" format" % dev_name
+ sys.exit(1)
+
+def unbind_one(dev_id, force):
+ '''Unbind the device identified by "dev_id" from its current driver'''
+ dev = devices[dev_id]
+ if not has_driver(dev_id):
+ print "%s %s %s is not currently managed by any driver\n" % \
+ (dev["Slot"], dev["Device_str"], dev["Interface"])
+ return
+
+ # prevent us disconnecting ourselves
+ if dev["Ssh_if"] and not force:
+ print "Routing table indicates that interface %s is active" \
+ ". Skipping unbind" % (dev_id)
+ return
+
+ # write to /sys to unbind
+ filename = "/sys/bus/pci/drivers/%s/unbind" % dev["Driver_str"]
+ try:
+ f = open(filename, "a")
+ except:
+ print "Error: unbind failed for %s - Cannot open %s" % (dev_id, filename)
+ sys/exit(1)
+ f.write(dev_id)
+ f.close()
+
+def bind_one(dev_id, driver, force):
+ '''Bind the device given by "dev_id" to the driver "driver". If the device
+ is already bound to a different driver, it will be unbound first'''
+ dev = devices[dev_id]
+ saved_driver = None # used to rollback any unbind in case of failure
+
+ # prevent disconnection of our ssh session
+ if dev["Ssh_if"] and not force:
+ print "Routing table indicates that interface %s is active" \
+ ". Not modifying" % (dev_id)
+ return
+
+ # unbind any existing drivers we don't want
+ if has_driver(dev_id):
+ if dev["Driver_str"] == driver:
+ print "%s already bound to driver %s, skipping\n" % (dev_id, driver)
+ return
+ else:
+ saved_driver = dev["Driver_str"]
+ unbind_one(dev_id, force)
+ dev["Driver_str"] = "" # clear driver string
+
+ # do the bind by writing to /sys
+ filename = "/sys/bus/pci/drivers/%s/bind" % driver
+ try:
+ f = open(filename, "a")
+ except:
+ print "Error: bind failed for %s - Cannot open %s" % (dev_id, filename)
+ if saved_driver is not None: # restore any previous driver
+ bind_one(dev_id, saved_driver, force)
+ return
+ try:
+ f.write(dev_id)
+ f.close()
+ except:
+ print "Error: bind failed for %s - Cannot bind to driver %s" % (dev_id, driver)
+ if saved_driver is not None: # restore any previous driver
+ bind_one(dev_id, saved_driver, force)
+ return
+
+
+def unbind_all(dev_list, force=False):
+ """Unbind method, takes a list of device locations"""
+ dev_list = map(dev_id_from_dev_name, dev_list)
+ for d in dev_list:
+ unbind_one(d, force)
+
+def bind_all(dev_list, driver, force=False):
+ """Unbind method, takes a list of device locations"""
+ dev_list = map(dev_id_from_dev_name, dev_list)
+ for d in dev_list:
+ bind_one(d, driver, force)
+
+def display_devices(title, dev_list, extra_params = None):
+ '''Displays to the user the details of a list of devices given in "dev_list"
+ The "extra_params" parameter, if given, should contain a string with
+ %()s fields in it for replacement by the named fields in each device's
+ dictionary.'''
+ strings = [] # this holds the strings to print. We sort before printing
+ print "\n%s" % title
+ print "="*len(title)
+ if len(dev_list) == 0:
+ strings.append("<none>")
+ else:
+ for dev in dev_list:
+ if extra_params is not None:
+ strings.append("%s '%s' %s" % (dev["Slot"], \
+ dev["Device_str"], extra_params % dev))
+ else:
+ strings.append("%s '%s'" % (dev["Slot"], dev["Device_str"]))
+ # sort before printing, so that the entries appear in PCI order
+ strings.sort()
+ print "\n".join(strings) # print one per line
+
+def show_status():
+ '''Function called when the script is passed the "--status" option. Displays
+ to the user what devices are bound to the igb_uio driver, the kernel driver
+ or to no driver'''
+ kernel_drv = []
+ uio_drv = []
+ no_drv = []
+ # split our list of devices into the three categories above
+ for d in devices.keys():
+ if not has_driver(d):
+ no_drv.append(devices[d])
+ continue
+ if devices[d]["Driver_str"] == "igb_uio":
+ uio_drv.append(devices[d])
+ else:
+ kernel_drv.append(devices[d])
+
+ # print each category separately, so we can clearly see what's used by DPDK
+ display_devices("Network devices using IGB_UIO driver", uio_drv, \
+ "drv=%(Driver_str)s unused=%(Module_str)s")
+ display_devices("Network devices using kernel driver", kernel_drv,
+ "if=%(Interface)s drv=%(Driver_str)s unused=%(Module_str)s %(Active)s")
+ display_devices("Other network devices", no_drv,\
+ "unused=%(Module_str)s")
+
+def parse_args():
+ '''Parses the command-line arguments given by the user and takes the
+ appropriate action for each'''
+ b_flag = None
+ status_flag = False
+ force_flag = False
+ if len(sys.argv) <= 1:
+ usage()
+ sys.exit(0)
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], "b:u",
+ ["help", "usage", "status", "force",
+ "bind=", "unbind"])
+ except getopt.GetoptError, error:
+ print str(error)
+ print "Run '%s --usage' for further information" % sys.argv[0]
+ sys.exit(1)
+
+ for opt, arg in opts:
+ if opt == "--help" or opt == "--usage":
+ usage()
+ sys.exit(0)
+ if opt == "--status":
+ status_flag = True
+ if opt == "--force":
+ force_flag = True
+ if opt == "-b" or opt == "-u" or opt == "--bind" or opt == "--unbind":
+ if b_flag is not None:
+ print "Error - Only one bind or unbind may be specified\n"
+ sys.exit(1)
+ if opt == "-u" or opt == "--unbind":
+ b_flag = "none"
+ else:
+ b_flag = arg
+
+ if b_flag is None and not status_flag:
+ print "Error: No action specified for devices. Please give a -b or -u option"
+ print "Run '%s --usage' for further information" % sys.argv[0]
+ sys.exit(1)
+
+ if b_flag is not None and len(args) == 0:
+ print "Error: No devices specified."
+ print "Run '%s --usage' for further information" % sys.argv[0]
+ sys.exit(1)
+
+ if b_flag == "none" or b_flag == "None":
+ unbind_all(args, force_flag)
+ elif b_flag is not None:
+ bind_all(args, b_flag, force_flag)
+ if status_flag:
+ if b_flag is not None:
+ get_nic_details() # refresh if we have changed anything
+ show_status()
+
+def main():
+ '''program main function'''
+ check_modules()
+ get_nic_details()
+ parse_args()
+
+if __name__ == "__main__":
+ main()
diff --git a/tools/pci_unbind.py b/tools/pci_unbind.py
deleted file mode 100755
index 528999a..0000000
--- a/tools/pci_unbind.py
+++ /dev/null
@@ -1,485 +0,0 @@
-#! /usr/bin/python
-#
-# BSD LICENSE
-#
-# Copyright(c) 2010-2013 Intel Corporation. All rights reserved.
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# * Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-# * Neither the name of Intel Corporation nor the names of its
-# contributors may be used to endorse or promote products derived
-# from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-import sys, os, getopt, subprocess
-from os.path import exists, abspath, dirname, basename
-
-
-# The PCI device class for ETHERNET devices
-ETHERNET_CLASS = "0200"
-
-# global dict ethernet devices present. Dictionary indexed by PCI address.
-# Each device within this is itself a dictionary of device properties
-devices = {}
-# list of vendor:device pairs (again stored as dictionary) supported by igb_uio
-module_dev_ids = []
-
-def usage():
- '''Print usage information for the program'''
- argv0 = basename(sys.argv[0])
- print """
-Usage:
-------
-
- %(argv0)s [options] DEVICE1 DEVICE2 ....
-
-where DEVICE1, DEVICE2 etc, are specified via PCI "domain:bus:slot.func" syntax
-or "bus:slot.func" syntax. For devices bound to Linux kernel drivers, they may
-also be referred to by Linux interface name e.g. eth0, eth1, em0, em1, etc.
-
-Options:
- --help, --usage:
- Display usage information and quit
-
- --status:
- Print the current status of all known network interfaces.
- For each device, it displays the PCI domain, bus, slot and function,
- along with a text description of the device. Depending upon whether the
- device is being used by a kernel driver, the igb_uio driver, or no
- driver, other relevant information will be displayed:
- * the Linux interface name e.g. if=eth0
- * the driver being used e.g. drv=igb_uio
- * any suitable drivers not currently using that device
- e.g. unused=igb_uio
- NOTE: if this flag is passed along with a bind/unbind option, the status
- display will always occur after the other operations have taken place.
-
- -b driver, --bind=driver:
- Select the driver to use or \"none\" to unbind the device
-
- -u, --unbind:
- Unbind a device (Equivalent to \"-b none\")
-
- --force:
- By default, devices which are used by Linux - as indicated by having
- routes in the routing table - cannot be modified. Using the --force
- flag overrides this behavior, allowing active links to be forcibly
- unbound.
- WARNING: This can lead to loss of network connection and should be used
- with caution.
-
-Examples:
----------
-
-To display current device status:
- %(argv0)s --status
-
-To bind eth1 from the current driver and move to use igb_uio
- %(argv0)s --bind=igb_uio eth1
-
-To unbind 0000:01:00.0 from using any driver
- %(argv0)s -u 0000:01:00.0
-
-To bind 0000:02:00.0 and 0000:02:00.1 to the ixgbe kernel driver
- %(argv0)s -b ixgbe 02:00.0 02:00.1
-
- """ % locals() # replace items from local variables
-
-# This is roughly compatible with check_output function in subprocess module
-# which is only available in python 2.7.
-def check_output(args, stderr=None):
- '''Run a command and capture its output'''
- return subprocess.Popen(args, stdout=subprocess.PIPE,
- stderr=stderr).communicate()[0]
-
-def find_module(mod):
- '''find the .ko file for kernel module named mod.
- Searches the $RTE_SDK/$RTE_TARGET directory, the kernel
- modules directory and finally under the parent directory of
- the script '''
- # check $RTE_SDK/$RTE_TARGET directory
- if 'RTE_SDK' in os.environ and 'RTE_TARGET' in os.environ:
- path = "%s/%s/kmod/%s.ko" % (os.environ['RTE_SDK'],\
- os.environ['RTE_TARGET'], mod)
- if exists(path):
- return path
-
- # check using depmod
- try:
- depmod_out = check_output(["modinfo", "-n", mod], \
- stderr=subprocess.STDOUT).lower()
- if "error" not in depmod_out:
- path = depmod_out.strip()
- if exists(path):
- return path
- except: # if modinfo can't find module, it fails, so continue
- pass
-
- # check for a copy based off current path
- tools_dir = dirname(abspath(sys.argv[0]))
- if (tools_dir.endswith("tools")):
- base_dir = dirname(tools_dir)
- find_out = check_output(["find", base_dir, "-name", mod + ".ko"])
- if len(find_out) > 0: #something matched
- path = find_out.splitlines()[0]
- if exists(path):
- return path
-
-def check_modules():
- '''Checks that the needed modules (igb_uio) is loaded, and then
- determine from the .ko file, what its supported device ids are'''
- global module_dev_ids
-
- fd = file("/proc/modules")
- loaded_mods = fd.readlines()
- fd.close()
- mod = "igb_uio"
-
- # first check if module is loaded
- found = False
- for line in loaded_mods:
- if line.startswith(mod):
- found = True
- break
- if not found:
- print "Error - module %s not loaded" %mod
- sys.exit(1)
-
- # now find the .ko and get list of supported vendor/dev-ids
- modpath = find_module(mod)
- if modpath is None:
- print "Cannot find module file %s" % (mod + ".ko")
- sys.exit(1)
- depmod_output = check_output(["depmod", "-n", modpath]).splitlines()
- for line in depmod_output:
- if not line.startswith("alias"):
- continue
- if not line.endswith(mod):
- continue
- lineparts = line.split()
- if not(lineparts[1].startswith("pci:")):
- continue;
- else:
- lineparts[1] = lineparts[1][4:]
- vendor = lineparts[1][:9]
- device = lineparts[1][9:18]
- if vendor.startswith("v") and device.startswith("d"):
- module_dev_ids.append({"Vendor": int(vendor[1:],16),
- "Device": int(device[1:],16)})
-
-def is_supported_device(dev_id):
- '''return true if device is supported by igb_uio, false otherwise'''
- for dev in module_dev_ids:
- if (dev["Vendor"] == devices[dev_id]["Vendor"] and
- dev["Device"] == devices[dev_id]["Device"]):
- return True
- return False
-
-def has_driver(dev_id):
- '''return true if a device is assigned to a driver. False otherwise'''
- return "Driver_str" in devices[dev_id]
-
-def get_nic_details():
- '''This function populates the "devices" dictionary. The keys used are
- the pci addresses (domain:bus:slot.func). The values are themselves
- dictionaries - one for each NIC.'''
- global devices
-
- # clear any old data
- devices = {}
- # first loop through and read details for all devices
- # request machine readable format, with numeric IDs
- dev = {};
- dev_lines = check_output(["lspci", "-Dvmmn"]).splitlines()
- for dev_line in dev_lines:
- if (len(dev_line) == 0):
- if dev["Class"] == ETHERNET_CLASS:
- #convert device and vendor ids to numbers, then add to global
- dev["Vendor"] = int(dev["Vendor"],16)
- dev["Device"] = int(dev["Device"],16)
- devices[dev["Slot"]] = dict(dev) # use dict to make copy of dev
- else:
- name, value = dev_line.split("\t", 1)
- dev[name.rstrip(":")] = value
-
- # check what is the interface if any for an ssh connection if
- # any to this host, so we can mark it later.
- ssh_if = []
- route = check_output(["ip", "-o", "route"])
- # filter out all lines for 169.254 routes
- route = "\n".join(filter(lambda ln: not ln.startswith("169.254"),
- route.splitlines()))
- rt_info = route.split()
- for i in xrange(len(rt_info) - 1):
- if rt_info[i] == "dev":
- ssh_if.append(rt_info[i+1])
-
- # based on the basic info, get extended text details
- for d in devices.keys():
- extra_info = check_output(["lspci", "-vmmks", d]).splitlines()
- # parse lspci details
- for line in extra_info:
- if len(line) == 0:
- continue
- name, value = line.split("\t", 1)
- name = name.strip(":") + "_str"
- devices[d][name] = value
- # check for a unix interface name
- sys_path = "/sys/bus/pci/devices/%s/net/" % d
- if exists(sys_path):
- devices[d]["Interface"] = ",".join(os.listdir(sys_path))
- else:
- devices[d]["Interface"] = ""
- # check if a port is used for ssh connection
- devices[d]["Ssh_if"] = False
- devices[d]["Active"] = ""
- for _if in ssh_if:
- if _if in devices[d]["Interface"].split(","):
- devices[d]["Ssh_if"] = True
- devices[d]["Active"] = "*Active*"
- break;
-
- # add igb_uio to list of supporting modules if needed
- if is_supported_device(d):
- if "Module_str" in devices[d]:
- if "igb_uio" not in devices[d]["Module_str"]:
- devices[d]["Module_str"] = devices[d]["Module_str"] + ",igb_uio"
- else:
- devices[d]["Module_str"] = "igb_uio"
- if "Module_str" not in devices[d]:
- devices[d]["Module_str"] = "<none>"
- # make sure the driver and module strings do not have any duplicates
- if has_driver(d):
- modules = devices[d]["Module_str"].split(",")
- if devices[d]["Driver_str"] in modules:
- modules.remove(devices[d]["Driver_str"])
- devices[d]["Module_str"] = ",".join(modules)
-
-def dev_id_from_dev_name(dev_name):
- '''Take a device "name" - a string passed in by user to identify a NIC
- device, and determine the device id - i.e. the domain:bus:slot.func - for
- it, which can then be used to index into the devices array'''
- dev = None
- # check if it's already a suitable index
- if dev_name in devices:
- return dev_name
- # check if it's an index just missing the domain part
- elif "0000:" + dev_name in devices:
- return "0000:" + dev_name
- else:
- # check if it's an interface name, e.g. eth1
- for d in devices.keys():
- if dev_name in devices[d]["Interface"].split(","):
- return devices[d]["Slot"]
- # if nothing else matches - error
- print "Unknown device: %s. " \
- "Please specify device in \"bus:slot.func\" format" % dev_name
- sys.exit(1)
-
-def unbind_one(dev_id, force):
- '''Unbind the device identified by "dev_id" from its current driver'''
- dev = devices[dev_id]
- if not has_driver(dev_id):
- print "%s %s %s is not currently managed by any driver\n" % \
- (dev["Slot"], dev["Device_str"], dev["Interface"])
- return
-
- # prevent us disconnecting ourselves
- if dev["Ssh_if"] and not force:
- print "Routing table indicates that interface %s is active" \
- ". Skipping unbind" % (dev_id)
- return
-
- # write to /sys to unbind
- filename = "/sys/bus/pci/drivers/%s/unbind" % dev["Driver_str"]
- try:
- f = open(filename, "a")
- except:
- print "Error: unbind failed for %s - Cannot open %s" % (dev_id, filename)
- sys/exit(1)
- f.write(dev_id)
- f.close()
-
-def bind_one(dev_id, driver, force):
- '''Bind the device given by "dev_id" to the driver "driver". If the device
- is already bound to a different driver, it will be unbound first'''
- dev = devices[dev_id]
- saved_driver = None # used to rollback any unbind in case of failure
-
- # prevent disconnection of our ssh session
- if dev["Ssh_if"] and not force:
- print "Routing table indicates that interface %s is active" \
- ". Not modifying" % (dev_id)
- return
-
- # unbind any existing drivers we don't want
- if has_driver(dev_id):
- if dev["Driver_str"] == driver:
- print "%s already bound to driver %s, skipping\n" % (dev_id, driver)
- return
- else:
- saved_driver = dev["Driver_str"]
- unbind_one(dev_id, force)
- dev["Driver_str"] = "" # clear driver string
-
- # do the bind by writing to /sys
- filename = "/sys/bus/pci/drivers/%s/bind" % driver
- try:
- f = open(filename, "a")
- except:
- print "Error: bind failed for %s - Cannot open %s" % (dev_id, filename)
- if saved_driver is not None: # restore any previous driver
- bind_one(dev_id, saved_driver, force)
- return
- try:
- f.write(dev_id)
- f.close()
- except:
- print "Error: bind failed for %s - Cannot bind to driver %s" % (dev_id, driver)
- if saved_driver is not None: # restore any previous driver
- bind_one(dev_id, saved_driver, force)
- return
-
-
-def unbind_all(dev_list, force=False):
- """Unbind method, takes a list of device locations"""
- dev_list = map(dev_id_from_dev_name, dev_list)
- for d in dev_list:
- unbind_one(d, force)
-
-def bind_all(dev_list, driver, force=False):
- """Unbind method, takes a list of device locations"""
- dev_list = map(dev_id_from_dev_name, dev_list)
- for d in dev_list:
- bind_one(d, driver, force)
-
-def display_devices(title, dev_list, extra_params = None):
- '''Displays to the user the details of a list of devices given in "dev_list"
- The "extra_params" parameter, if given, should contain a string with
- %()s fields in it for replacement by the named fields in each device's
- dictionary.'''
- strings = [] # this holds the strings to print. We sort before printing
- print "\n%s" % title
- print "="*len(title)
- if len(dev_list) == 0:
- strings.append("<none>")
- else:
- for dev in dev_list:
- if extra_params is not None:
- strings.append("%s '%s' %s" % (dev["Slot"], \
- dev["Device_str"], extra_params % dev))
- else:
- strings.append("%s '%s'" % (dev["Slot"], dev["Device_str"]))
- # sort before printing, so that the entries appear in PCI order
- strings.sort()
- print "\n".join(strings) # print one per line
-
-def show_status():
- '''Function called when the script is passed the "--status" option. Displays
- to the user what devices are bound to the igb_uio driver, the kernel driver
- or to no driver'''
- kernel_drv = []
- uio_drv = []
- no_drv = []
- # split our list of devices into the three categories above
- for d in devices.keys():
- if not has_driver(d):
- no_drv.append(devices[d])
- continue
- if devices[d]["Driver_str"] == "igb_uio":
- uio_drv.append(devices[d])
- else:
- kernel_drv.append(devices[d])
-
- # print each category separately, so we can clearly see what's used by DPDK
- display_devices("Network devices using IGB_UIO driver", uio_drv, \
- "drv=%(Driver_str)s unused=%(Module_str)s")
- display_devices("Network devices using kernel driver", kernel_drv,
- "if=%(Interface)s drv=%(Driver_str)s unused=%(Module_str)s %(Active)s")
- display_devices("Other network devices", no_drv,\
- "unused=%(Module_str)s")
-
-def parse_args():
- '''Parses the command-line arguments given by the user and takes the
- appropriate action for each'''
- b_flag = None
- status_flag = False
- force_flag = False
- if len(sys.argv) <= 1:
- usage()
- sys.exit(0)
-
- try:
- opts, args = getopt.getopt(sys.argv[1:], "b:u",
- ["help", "usage", "status", "force",
- "bind=", "unbind"])
- except getopt.GetoptError, error:
- print str(error)
- print "Run '%s --usage' for further information" % sys.argv[0]
- sys.exit(1)
-
- for opt, arg in opts:
- if opt == "--help" or opt == "--usage":
- usage()
- sys.exit(0)
- if opt == "--status":
- status_flag = True
- if opt == "--force":
- force_flag = True
- if opt == "-b" or opt == "-u" or opt == "--bind" or opt == "--unbind":
- if b_flag is not None:
- print "Error - Only one bind or unbind may be specified\n"
- sys.exit(1)
- if opt == "-u" or opt == "--unbind":
- b_flag = "none"
- else:
- b_flag = arg
-
- if b_flag is None and not status_flag:
- print "Error: No action specified for devices. Please give a -b or -u option"
- print "Run '%s --usage' for further information" % sys.argv[0]
- sys.exit(1)
-
- if b_flag is not None and len(args) == 0:
- print "Error: No devices specified."
- print "Run '%s --usage' for further information" % sys.argv[0]
- sys.exit(1)
-
- if b_flag == "none" or b_flag == "None":
- unbind_all(args, force_flag)
- elif b_flag is not None:
- bind_all(args, b_flag, force_flag)
- if status_flag:
- if b_flag is not None:
- get_nic_details() # refresh if we have changed anything
- show_status()
-
-def main():
- '''program main function'''
- check_modules()
- get_nic_details()
- parse_args()
-
-if __name__ == "__main__":
- main()
diff --git a/tools/setup.sh b/tools/setup.sh
index cddcbdc..c8d42bf 100755
--- a/tools/setup.sh
+++ b/tools/setup.sh
@@ -324,13 +324,13 @@ grep_meminfo()
}
#
-# Calls pci_unbind.py --status to show the NIC and what they
+# Calls igb_uio_bind.py --status to show the NIC and what they
# are all bound to, in terms of drivers.
#
show_nics()
{
if /sbin/lsmod | grep -q igb_uio ; then
- ${RTE_SDK}/tools/pci_unbind.py --status
+ ${RTE_SDK}/tools/igb_uio_bind.py --status
else
echo "# Please load the 'igb_uio' kernel module before querying or "
echo "# adjusting NIC device bindings"
@@ -338,16 +338,16 @@ show_nics()
}
#
-# Uses pci_unbind.py to move devices to work with igb_uio
+# Uses igb_uio_bind.py to move devices to work with igb_uio
#
bind_nics()
{
if /sbin/lsmod | grep -q igb_uio ; then
- ${RTE_SDK}/tools/pci_unbind.py --status
+ ${RTE_SDK}/tools/igb_uio_bind.py --status
echo ""
echo -n "Enter PCI address of device to bind to IGB UIO driver: "
read PCI_PATH
- sudo ${RTE_SDK}/tools/pci_unbind.py -b igb_uio $PCI_PATH && echo "OK"
+ sudo ${RTE_SDK}/tools/igb_uio_bind.py -b igb_uio $PCI_PATH && echo "OK"
else
echo "# Please load the 'igb_uio' kernel module before querying or "
echo "# adjusting NIC device bindings"
@@ -355,18 +355,18 @@ bind_nics()
}
#
-# Uses pci_unbind.py to move devices to work with kernel drivers again
+# Uses igb_uio_bind.py to move devices to work with kernel drivers again
#
unbind_nics()
{
- ${RTE_SDK}/tools/pci_unbind.py --status
+ ${RTE_SDK}/tools/igb_uio_bind.py --status
echo ""
echo -n "Enter PCI address of device to bind to IGB UIO driver: "
read PCI_PATH
echo ""
echo -n "Enter name of kernel driver to bind the device to: "
read DRV
- sudo ${RTE_SDK}/tools/pci_unbind.py -b $DRV $PCI_PATH && echo "OK"
+ sudo ${RTE_SDK}/tools/igb_uio_bind.py -b $DRV $PCI_PATH && echo "OK"
}
#
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [PATCH 02/16] virtio: rename library
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-02-24 16:05 ` Chris Wright
2014-02-04 15:54 ` [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM Thomas Monjalon
` (13 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
In order to distinguish clearly this implementation from the extension
virtio-net-pmd, it is renamed to reflect its usage of uio framework.
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
lib/librte_pmd_virtio/Makefile | 2 +-
mk/rte.app.mk | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/librte_pmd_virtio/Makefile b/lib/librte_pmd_virtio/Makefile
index 764d8e8..a60c5f4 100644
--- a/lib/librte_pmd_virtio/Makefile
+++ b/lib/librte_pmd_virtio/Makefile
@@ -34,7 +34,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
#
# library name
#
-LIB = librte_pmd_virtio.a
+LIB = librte_pmd_virtio_uio.a
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
diff --git a/mk/rte.app.mk b/mk/rte.app.mk
index 1652029..6432f17 100644
--- a/mk/rte.app.mk
+++ b/mk/rte.app.mk
@@ -73,7 +73,7 @@ LDLIBS += -lrte_pmd_ixgbe
endif
ifeq ($(CONFIG_RTE_LIBRTE_VIRTIO_PMD),y)
-LDLIBS += -lrte_pmd_virtio
+LDLIBS += -lrte_pmd_virtio_uio
endif
ifeq ($(CONFIG_RTE_LIBRTE_CMDLINE),y)
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [PATCH 02/16] virtio: rename library Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-02-24 16:29 ` Chris Wright
` (2 more replies)
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 04/16] pmd: add make help Thomas Monjalon
` (12 subsequent siblings)
15 siblings, 3 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Packages can be built with:
RPM_BUILD_NCPUS=8 rpmbuild -ta dpdk-1.5.2r2.tar.gz
There are packages for runtime, static libraries and development.
Once devel package installed, it can be used like this:
make -C /usr/share/dpdk/examples/helloworld RTE_SDK=/usr/share/dpdk
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pkg/rpm.spec | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 143 insertions(+)
create mode 100644 pkg/rpm.spec
diff --git a/pkg/rpm.spec b/pkg/rpm.spec
new file mode 100644
index 0000000..d806d55
--- /dev/null
+++ b/pkg/rpm.spec
@@ -0,0 +1,143 @@
+# Copyright 2014 6WIND S.A.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# - Neither the name of 6WIND S.A. nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+# OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: dpdk
+Version: 1.5.2r1
+Release: 1
+Packager: packaging@6wind.com
+URL: http://dpdk.org
+Source: http://dpdk.org/browse/dpdk/snapshot/dpdk-%{version}.tar.gz
+
+Summary: Intel(r) Data Plane Development Kit
+Group: System Environment/Libraries
+License: BSD and LGPLv2 and GPLv2
+
+ExclusiveArch: i686, x86_64
+%define target %{_arch}-default-linuxapp-gcc
+%define machine default
+
+BuildRequires: kernel-devel, kernel-headers, doxygen
+
+%description
+Dummy main package. Make only subpackages.
+
+%package core-runtime
+Summary: Intel(r) Data Plane Development Kit core for runtime
+%description core-runtime
+Intel(r) DPDK runtime includes kernel modules, core libraries and tools.
+testpmd application allows to test fast packet processing environments
+on x86 platforms. For instance, it can be used to check that environment
+can support fast path applications such as 6WINDGate, pktgen, rumptcpip, etc.
+More libraries are available as extensions in other packages.
+
+%package core-static
+Requires: %{name}-core-runtime
+Summary: Intel(r) Data Plane Development Kit core as static libraries
+%description core-static
+Intel(r) DPDK static provides static version of the core libraries
+for fast packet processing on x86 platforms.
+More libraries are available as extensions in other packages.
+
+%package core-devel
+Requires: %{name}-core-static
+Summary: Intel(r) Data Plane Development Kit core for development
+%description core-devel
+Intel(r) DPDK devel is a set of makefiles, headers, examples and documentation
+for fast packet processing on x86 platforms.
+More libraries are available as extensions in other packages.
+
+# debuginfo packaging is broken
+%define debug_package %{nil}
+
+%define destdir %{buildroot}%{_prefix}
+%define moddir /lib/modules/%(uname -r)/extra
+%define datadir %{_datadir}/%{name}
+%define docdir %{_docdir}/%{name}
+
+%prep
+%setup -q
+
+%build
+make O=%{target} T=%{target} config
+sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config
+sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config
+sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' %{target}/.config
+make O=%{target} %{?_smp_mflags}
+cp %{target}/lib/*.so %{target}
+sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config
+make O=%{target} %{?_smp_mflags}
+make O=%{target} doc
+
+%install
+rm -rf %{buildroot}
+make O=%{target} DESTDIR=%{destdir}
+mkdir -p %{buildroot}%{moddir}
+mv %{destdir}/%{target}/kmod/*.ko %{buildroot}%{moddir}
+rmdir %{destdir}/%{target}/kmod
+mkdir -p %{buildroot}%{_sbindir}
+ln -s %{datadir}/tools/igb_uio_bind.py %{buildroot}%{_sbindir}/igb_uio_bind
+mkdir -p %{buildroot}%{_bindir}
+mv %{destdir}/%{target}/app/testpmd %{buildroot}%{_bindir}
+rmdir %{destdir}/%{target}/app
+mv %{destdir}/%{target}/include %{buildroot}%{_includedir}
+mv %{destdir}/%{target}/lib %{buildroot}%{_libdir}
+mv %{destdir}/%{target}/*.so %{buildroot}%{_libdir}
+mkdir -p %{buildroot}%{docdir}
+mv %{destdir}/%{target}/doc/* %{buildroot}%{docdir}
+rmdir %{destdir}/%{target}/doc
+mkdir -p %{buildroot}%{datadir}
+mv %{destdir}/%{target}/.config %{buildroot}%{datadir}/config
+mv %{destdir}/%{target} %{buildroot}%{datadir}
+mv %{destdir}/mk %{buildroot}%{datadir}
+cp -a examples %{buildroot}%{datadir}
+cp -a tools %{buildroot}%{datadir}
+ln -s %{datadir}/config %{buildroot}%{datadir}/%{target}/.config
+ln -s %{_includedir} %{buildroot}%{datadir}/%{target}/include
+ln -s %{_libdir} %{buildroot}%{datadir}/%{target}/lib
+
+%files core-runtime
+%dir %{datadir}
+%{datadir}/config
+%{datadir}/tools
+%{moddir}/*
+%{_sbindir}/*
+%{_bindir}/*
+%{_libdir}/*.so
+
+%files core-static
+%{_libdir}/*.a
+
+%files core-devel
+%{_includedir}/*
+%{datadir}/mk
+%{datadir}/%{target}
+%{datadir}/examples
+%doc %{docdir}
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [vmxnet3-usermap PATCH 04/16] pmd: add make help
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (2 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-02-24 18:17 ` Chris Wright
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 05/16] pmd: allow to build outside of the source directory Thomas Monjalon
` (11 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Add help for quick tips.
Also define CC and remove RTE_CONFIG variable.
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pmd/Makefile | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/pmd/Makefile b/pmd/Makefile
index 994851c..d8eff33 100644
--- a/pmd/Makefile
+++ b/pmd/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2013 6WIND S.A.
+# Copyright 2013-2014 6WIND S.A.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -29,24 +29,33 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.
+SOLIB = librte_pmd_vmxnet3.so
+
+CC = $(CROSS)gcc
override CPPFLAGS += -Wall -Wextra -Werror
override CFLAGS += -fPIC
override LDFLAGS += -shared
KMOD_INCLUDE ?= ../kmod
-RTE_CONFIG = $(RTE_INCLUDE)/rte_config.h
-SOLIB = librte_pmd_vmxnet3.so
all :
ifeq '$(RTE_INCLUDE)' ''
@ echo 'ERROR: RTE_INCLUDE is not set' && false
endif
- $(CROSS)gcc $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
- -I$(RTE_INCLUDE) -include $(RTE_CONFIG) \
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
+ -I$(RTE_INCLUDE) -include $(RTE_INCLUDE)/rte_config.h \
-I$(KMOD_INCLUDE) -I$(KMOD_INCLUDE)/shared \
-o $(SOLIB) vmxnet3.c
clean :
rm -f $(SOLIB)
-.PHONY : all clean
+help :
+ @ echo 'rules:'
+ @ echo ' all (default)'
+ @ echo ' clean'
+ @ echo 'build variables:'
+ @ echo ' RTE_INCLUDE (e.g. ../dpdk/build/include),'
+ @ echo ' CPPFLAGS, CFLAGS, LDFLAGS'
+
+.PHONY : all clean help
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [vmxnet3-usermap PATCH 05/16] pmd: allow to build outside of the source directory
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (3 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 04/16] pmd: add make help Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-02-24 18:13 ` Chris Wright
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 06/16] pmd: allow to install lib and doc Thomas Monjalon
` (10 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
S specify source directory (when not already in).
O specify output directory (when different of current one).
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pmd/Makefile | 21 ++++++++++++++++-----
1 file changed, 16 insertions(+), 5 deletions(-)
diff --git a/pmd/Makefile b/pmd/Makefile
index d8eff33..2d66fb7 100644
--- a/pmd/Makefile
+++ b/pmd/Makefile
@@ -36,19 +36,29 @@ override CPPFLAGS += -Wall -Wextra -Werror
override CFLAGS += -fPIC
override LDFLAGS += -shared
-KMOD_INCLUDE ?= ../kmod
+KMOD_INCLUDE ?= $S/../kmod
+S ?= .
+O ?= .
-all :
+all : $O/$(SOLIB)
+
+$O :
+ mkdir -p $@
+
+$O/$(SOLIB) : $S/vmxnet3.c | $O
ifeq '$(RTE_INCLUDE)' ''
@ echo 'ERROR: RTE_INCLUDE is not set' && false
endif
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
-I$(RTE_INCLUDE) -include $(RTE_INCLUDE)/rte_config.h \
-I$(KMOD_INCLUDE) -I$(KMOD_INCLUDE)/shared \
- -o $(SOLIB) vmxnet3.c
+ -o $@ $<
clean :
- rm -f $(SOLIB)
+ - rm -f $O/$(SOLIB)
+ifneq '$(abspath $O)' '$(CURDIR)'
+ - rmdir -p $O 2>&-
+endif
help :
@ echo 'rules:'
@@ -56,6 +66,7 @@ help :
@ echo ' clean'
@ echo 'build variables:'
@ echo ' RTE_INCLUDE (e.g. ../dpdk/build/include),'
- @ echo ' CPPFLAGS, CFLAGS, LDFLAGS'
+ @ echo ' CPPFLAGS, CFLAGS, LDFLAGS,'
+ @ echo ' S (source directory), O (build directory)'
.PHONY : all clean help
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [vmxnet3-usermap PATCH 06/16] pmd: allow to install lib and doc
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (4 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 05/16] pmd: allow to build outside of the source directory Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-26 22:00 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM Thomas Monjalon
` (9 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pmd/Makefile | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/pmd/Makefile b/pmd/Makefile
index 2d66fb7..759800e 100644
--- a/pmd/Makefile
+++ b/pmd/Makefile
@@ -30,6 +30,7 @@
# OF THE POSSIBILITY OF SUCH DAMAGE.
SOLIB = librte_pmd_vmxnet3.so
+DOC = dpdk-vmxnet3-usermap.rst
CC = $(CROSS)gcc
override CPPFLAGS += -Wall -Wextra -Werror
@@ -40,6 +41,12 @@ KMOD_INCLUDE ?= $S/../kmod
S ?= .
O ?= .
+prefix ?= /usr/local
+exec_prefix ?= $(prefix)
+libdir ?= $(exec_prefix)/lib
+datarootdir ?= $(prefix)/share
+docdir ?= $(datarootdir)/doc/dpdk
+
all : $O/$(SOLIB)
$O :
@@ -54,19 +61,38 @@ endif
-I$(KMOD_INCLUDE) -I$(KMOD_INCLUDE)/shared \
-o $@ $<
+install : $(DESTDIR)$(libdir)/$(SOLIB)
+$(DESTDIR)$(libdir)/$(SOLIB): $O/$(SOLIB)
+ install -D -m 644 $< $@
+
+install : $(DESTDIR)$(docdir)/$(DOC)
+$(DESTDIR)$(docdir)/$(DOC) : $S/../README.rst
+ install -D -m 644 $< $@
+
clean :
- rm -f $O/$(SOLIB)
ifneq '$(abspath $O)' '$(CURDIR)'
- rmdir -p $O 2>&-
endif
+uninstall :
+ - rm -f $(DESTDIR)$(libdir)/$(SOLIB)
+ - rmdir -p $(DESTDIR)$(libdir) 2>&-
+ - rm -f $(DESTDIR)$(docdir)/$(DOC)
+ - rmdir -p $(DESTDIR)$(docdir) 2>&-
+
help :
@ echo 'rules:'
@ echo ' all (default)'
@ echo ' clean'
+ @ echo ' install'
+ @ echo ' uninstall'
@ echo 'build variables:'
@ echo ' RTE_INCLUDE (e.g. ../dpdk/build/include),'
@ echo ' CPPFLAGS, CFLAGS, LDFLAGS,'
@ echo ' S (source directory), O (build directory)'
+ @ echo 'install variables:'
+ @ echo ' DESTDIR (optional),'
+ @ echo ' prefix, exec_prefix, libdir, datarootdir, docdir'
-.PHONY : all clean help
+.PHONY : all clean install uninstall help
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (5 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 06/16] pmd: allow to install lib and doc Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-02-26 13:22 ` Thomas Graf
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 08/16] pmd: fix initialization of Tx queue header Thomas Monjalon
` (8 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Package can be built with:
rpmbuild -ta vmxnet3-usermap-1.2.tar.gz
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pkg/rpm.spec | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 76 insertions(+)
create mode 100644 pkg/rpm.spec
diff --git a/pkg/rpm.spec b/pkg/rpm.spec
new file mode 100644
index 0000000..495189f
--- /dev/null
+++ b/pkg/rpm.spec
@@ -0,0 +1,76 @@
+# Copyright 2014 6WIND S.A.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# - Neither the name of 6WIND S.A. nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+# OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: dpdk-vmxnet3
+Version: 1.1
+Release: 1
+Packager: packaging@6wind.com
+URL: http://dpdk.org/doc/vmxnet3-usermap
+Source: http://dpdk.org/browse/vmxnet3-usermap/snapshot/vmxnet3-usermap-%{version}.tar.gz
+
+Summary: vmxnet3 driver for Intel(r) Data Plane Development Kit
+Group: System Environment/Libraries
+License: BSD and GPLv2
+
+ExclusiveArch: i686, x86_64
+%define target %{_arch}-default-linuxapp-gcc
+
+BuildRequires: dpdk-core-devel, kernel-devel, kernel-headers
+Requires: dpdk-core-runtime
+
+%description
+vmxnet3 is a paravirtualized network interface initially used in VMware ESXi,
+and has been introduced as PMD by 6WIND. It avoids security risk by not using
+UIO framework.
+
+%define datadir %{_datadir}/dpdk
+%define docdir %{_docdir}/dpdk
+%define modroot /lib/modules/%(uname -r)
+%define kerneldir %{modroot}/build
+%define moddir %{modroot}/extra
+
+%prep
+%setup -qn vmxnet3-usermap-%{version}
+
+%build
+make %{?_smp_mflags} -C pmd RTE_INCLUDE=%{datadir}/%{target}/include
+make %{?_smp_mflags} -C kmod HEADER_DIR=%{kerneldir}/include
+
+%install
+rm -rf %{buildroot}
+make install -C pmd DESTDIR=%{buildroot} libdir=%{_libdir} docdir=%{docdir}
+make modules_install -C %{kerneldir} M=$(pwd)/kmod INSTALL_MOD_PATH=%{buildroot}
+rm -f %{buildroot}%{modroot}/modules.*
+
+%files
+%{moddir}/*
+%{_libdir}/*
+%doc %{docdir}
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [virtio-net-pmd PATCH 08/16] pmd: fix initialization of Tx queue header
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (6 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-27 8:23 ` Olivier MATZ
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 09/16] mk: minor fixes Thomas Monjalon
` (7 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
A typo was found by gcc-4.8:
virtio_user.c:744:15: error: argument to 'sizeof' in 'memset' call is the
same expression as the destination; did you mean to dereference it?
[-Werror=sizeof-pointer-memaccess]
sizeof(tq->tx_hdrs[sz - 1].header));
^
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
virtio_user.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/virtio_user.c b/virtio_user.c
index 1074bd8..a5f81df 100644
--- a/virtio_user.c
+++ b/virtio_user.c
@@ -1,5 +1,5 @@
/*
- * Copyright 2013 6WIND S.A.
+ * Copyright 2013-2014 6WIND S.A.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -741,7 +741,7 @@ virtio_alloc_txq(struct virtio_net_vring* tq, int sz)
}
/* Reserve a NULL header for NO OP on hypervisor side. */
memset(tq->tx_hdrs[sz - 1].header, 0,
- sizeof(tq->tx_hdrs[sz - 1].header));
+ sizeof(*tq->tx_hdrs[sz - 1].header));
return 0;
}
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [virtio-net-pmd PATCH 09/16] mk: minor fixes
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (7 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 08/16] pmd: fix initialization of Tx queue header Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-27 8:26 ` Olivier MATZ
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 10/16] mk: allow to build outside of the source directory Thomas Monjalon
` (6 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Fix help.
Also define CC and remove RTE_CONFIG variable.
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
Makefile | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/Makefile b/Makefile
index d90f23e..4b51057 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# Copyright 2013 6WIND S.A.
+# Copyright 2013-2014 6WIND S.A.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -29,19 +29,19 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.
+SOLIB = librte_pmd_virtio.so
+
+CC = $(CROSS)gcc
override CPPFLAGS += -Wall -Wextra -Werror
override CFLAGS += -fPIC
override LDFLAGS += -shared
-RTE_CONFIG = $(RTE_INCLUDE)/rte_config.h
-SOLIB = librte_pmd_virtio.so
-
all :
ifeq '$(RTE_INCLUDE)' ''
@ echo 'ERROR: RTE_INCLUDE is not set' && false
endif
- $(CROSS)gcc $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
- -I$(RTE_INCLUDE) -include $(RTE_CONFIG) \
+ $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
+ -I$(RTE_INCLUDE) -include $(RTE_INCLUDE)/rte_config.h \
-o $(SOLIB) virtio_user.c
clean :
@@ -52,6 +52,7 @@ help :
@ echo ' all (default)'
@ echo ' clean'
@ echo 'variables:'
- @ echo ' RTE_INCLUDE (e.g. ../dpdk/build/include)'
+ @ echo ' RTE_INCLUDE (e.g. ../dpdk/build/include),'
+ @ echo ' CPPFLAGS, CFLAGS, LDFLAGS'
-.PHONY : all clean
+.PHONY : all clean help
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [virtio-net-pmd PATCH 10/16] mk: allow to build outside of the source directory
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (8 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 09/16] mk: minor fixes Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-27 8:31 ` Olivier MATZ
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 11/16] mk: allow to install lib and doc Thomas Monjalon
` (5 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
S specify source directory (when not already in).
O specify output directory (when different of current one).
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
Makefile | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index 4b51057..4ff4c1d 100644
--- a/Makefile
+++ b/Makefile
@@ -36,16 +36,27 @@ override CPPFLAGS += -Wall -Wextra -Werror
override CFLAGS += -fPIC
override LDFLAGS += -shared
-all :
+S ?= .
+O ?= .
+
+all : $O/$(SOLIB)
+
+$O :
+ mkdir -p $@
+
+$O/$(SOLIB) : $S/virtio_user.c | $O
ifeq '$(RTE_INCLUDE)' ''
@ echo 'ERROR: RTE_INCLUDE is not set' && false
endif
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
-I$(RTE_INCLUDE) -include $(RTE_INCLUDE)/rte_config.h \
- -o $(SOLIB) virtio_user.c
+ -o $@ $<
clean :
- rm -f $(SOLIB)
+ - rm -f $O/$(SOLIB)
+ifneq '$(abspath $O)' '$(CURDIR)'
+ - rmdir -p $O 2>&-
+endif
help :
@ echo 'rules:'
@@ -53,6 +64,7 @@ help :
@ echo ' clean'
@ echo 'variables:'
@ echo ' RTE_INCLUDE (e.g. ../dpdk/build/include),'
- @ echo ' CPPFLAGS, CFLAGS, LDFLAGS'
+ @ echo ' CPPFLAGS, CFLAGS, LDFLAGS,'
+ @ echo ' S (source directory), O (build directory)'
.PHONY : all clean help
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [virtio-net-pmd PATCH 11/16] mk: allow to install lib and doc
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (9 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 10/16] mk: allow to build outside of the source directory Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-27 8:32 ` Olivier MATZ
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 12/16] pkg: add recipe for RPM Thomas Monjalon
` (4 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
Makefile | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index 4ff4c1d..100864d 100644
--- a/Makefile
+++ b/Makefile
@@ -30,6 +30,7 @@
# OF THE POSSIBILITY OF SUCH DAMAGE.
SOLIB = librte_pmd_virtio.so
+DOC = dpdk-virtio-net-pmd.rst
CC = $(CROSS)gcc
override CPPFLAGS += -Wall -Wextra -Werror
@@ -39,6 +40,12 @@ override LDFLAGS += -shared
S ?= .
O ?= .
+prefix ?= /usr/local
+exec_prefix ?= $(prefix)
+libdir ?= $(exec_prefix)/lib
+datarootdir ?= $(prefix)/share
+docdir ?= $(datarootdir)/doc/dpdk
+
all : $O/$(SOLIB)
$O :
@@ -52,19 +59,38 @@ endif
-I$(RTE_INCLUDE) -include $(RTE_INCLUDE)/rte_config.h \
-o $@ $<
+install : $(DESTDIR)$(libdir)/$(SOLIB)
+$(DESTDIR)$(libdir)/$(SOLIB): $O/$(SOLIB)
+ install -D -m 644 $< $@
+
+install : $(DESTDIR)$(docdir)/$(DOC)
+$(DESTDIR)$(docdir)/$(DOC) : $S/README.rst
+ install -D -m 644 $< $@
+
clean :
- rm -f $O/$(SOLIB)
ifneq '$(abspath $O)' '$(CURDIR)'
- rmdir -p $O 2>&-
endif
+uninstall :
+ - rm -f $(DESTDIR)$(libdir)/$(SOLIB)
+ - rmdir -p $(DESTDIR)$(libdir) 2>&-
+ - rm -f $(DESTDIR)$(docdir)/$(DOC)
+ - rmdir -p $(DESTDIR)$(docdir) 2>&-
+
help :
@ echo 'rules:'
@ echo ' all (default)'
@ echo ' clean'
- @ echo 'variables:'
+ @ echo ' install'
+ @ echo ' uninstall'
+ @ echo 'build variables:'
@ echo ' RTE_INCLUDE (e.g. ../dpdk/build/include),'
@ echo ' CPPFLAGS, CFLAGS, LDFLAGS,'
@ echo ' S (source directory), O (build directory)'
+ @ echo 'install variables:'
+ @ echo ' DESTDIR (optional),'
+ @ echo ' prefix, exec_prefix, libdir, datarootdir, docdir'
-.PHONY : all clean help
+.PHONY : all clean install uninstall help
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [virtio-net-pmd PATCH 12/16] pkg: add recipe for RPM
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (10 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 11/16] mk: allow to install lib and doc Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 13/16] pmd: rename doc when installing Thomas Monjalon
` (3 subsequent siblings)
15 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Package can be built with:
rpmbuild -ta virtio-net-pmd-1.2.tar.gz
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pkg/rpm.spec | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
create mode 100644 pkg/rpm.spec
diff --git a/pkg/rpm.spec b/pkg/rpm.spec
new file mode 100644
index 0000000..4768e91
--- /dev/null
+++ b/pkg/rpm.spec
@@ -0,0 +1,69 @@
+# Copyright 2014 6WIND S.A.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# - Neither the name of 6WIND S.A. nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+# OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: dpdk-virtio
+Version: 1.1
+Release: 1
+Packager: packaging@6wind.com
+URL: http://dpdk.org/doc/virtio-net-pmd
+Source: http://dpdk.org/browse/virtio-net-pmd/snapshot/virtio-net-pmd-%{version}.tar.gz
+
+Summary: virtio-net driver for Intel(r) Data Plane Development Kit
+Group: System Environment/Libraries
+License: BSD
+
+ExclusiveArch: i686, x86_64
+%define target %{_arch}-default-linuxapp-gcc
+
+BuildRequires: dpdk-core-devel, kernel-headers
+Requires: dpdk-core-runtime
+
+%description
+virtio-net is a paravirtualized network interface based on virtio framework,
+and has been introduced as PMD by 6WIND. It avoids security risk by not using
+UIO framework.
+
+%define datadir %{_datadir}/dpdk
+%define docdir %{_docdir}/dpdk
+
+%prep
+%setup -qn virtio-net-pmd-%{version}
+
+%build
+make %{?_smp_mflags} RTE_INCLUDE=%{datadir}/%{target}/include
+
+%install
+rm -rf %{buildroot}
+make install DESTDIR=%{buildroot} libdir=%{_libdir} docdir=%{docdir}
+
+%files
+%{_libdir}/*
+%doc %{docdir}
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [memnic PATCH 13/16] pmd: rename doc when installing
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (11 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 12/16] pkg: add recipe for RPM Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-27 8:36 ` Olivier MATZ
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 14/16] pmd: fix doc uninstalling Thomas Monjalon
` (2 subsequent siblings)
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
MEMNIC doc may be installed with other DPDK docs.
So more descriptive naming is required.
A rule is created in order to have the same rule style for lib and doc.
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pmd/Makefile | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/pmd/Makefile b/pmd/Makefile
index 7f96af1..1e24a15 100644
--- a/pmd/Makefile
+++ b/pmd/Makefile
@@ -33,6 +33,7 @@ PKG = librte_pmd_memnic_copy
RTE_CONFIG = $(RTE_INCLUDE)/rte_config.h
SOLIB = $(PKG).so
+DOC = dpdk-memnic.rst
S ?= .
O ?= .
@@ -46,7 +47,7 @@ prefix ?= /usr/local
exec_prefix ?= $(prefix)
libdir ?= $(exec_prefix)/lib
datarootdir ?= $(prefix)/share
-docdir ?= $(datarootdir)/doc/$(PKG)
+docdir ?= $(datarootdir)/doc/dpdk
all : $O/$(SOLIB)
@@ -62,11 +63,13 @@ endif
-I$S/../common -o $@ $<
install : $(DESTDIR)$(libdir)/$(SOLIB)
- install -D -m 644 $S/README.rst $(DESTDIR)$(docdir)/README.rst
-
$(DESTDIR)$(libdir)/$(SOLIB): $O/$(SOLIB)
install -D -m 644 $< $@
+install : $(DESTDIR)$(docdir)/$(DOC)
+$(DESTDIR)$(docdir)/$(DOC) : $S/README.rst
+ install -D -m 644 $< $@
+
clean :
- rm -f $O/$(SOLIB)
ifneq '$(abspath $O)' '$(CURDIR)'
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [memnic PATCH 14/16] pmd: fix doc uninstalling
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (12 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 13/16] pmd: rename doc when installing Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-27 8:45 ` Olivier MATZ
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 15/16] pmd: remove useless makefile variables Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 16/16] pkg: add recipe for RPM Thomas Monjalon
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pmd/Makefile | 2 ++
1 file changed, 2 insertions(+)
diff --git a/pmd/Makefile b/pmd/Makefile
index 1e24a15..730b126 100644
--- a/pmd/Makefile
+++ b/pmd/Makefile
@@ -79,6 +79,8 @@ endif
uninstall :
- rm -f $(DESTDIR)$(libdir)/$(SOLIB)
- rmdir -p $(DESTDIR)$(libdir) 2>&-
+ - rm -f $(DESTDIR)$(docdir)/$(DOC)
+ - rmdir -p $(DESTDIR)$(docdir) 2>&-
help :
@ echo 'rules:'
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [memnic PATCH 15/16] pmd: remove useless makefile variables
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (13 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 14/16] pmd: fix doc uninstalling Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
2014-03-27 8:45 ` Olivier MATZ
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 16/16] pkg: add recipe for RPM Thomas Monjalon
15 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pmd/Makefile | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/pmd/Makefile b/pmd/Makefile
index 730b126..5edc44e 100644
--- a/pmd/Makefile
+++ b/pmd/Makefile
@@ -29,10 +29,7 @@
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
# OF THE POSSIBILITY OF SUCH DAMAGE.
-PKG = librte_pmd_memnic_copy
-
-RTE_CONFIG = $(RTE_INCLUDE)/rte_config.h
-SOLIB = $(PKG).so
+SOLIB = librte_pmd_memnic_copy.so
DOC = dpdk-memnic.rst
S ?= .
@@ -59,7 +56,7 @@ ifeq '$(RTE_INCLUDE)' ''
@ echo 'ERROR: RTE_INCLUDE is not set' && false
endif
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
- -I$(RTE_INCLUDE) -include $(RTE_CONFIG) \
+ -I$(RTE_INCLUDE) -include $(RTE_INCLUDE)/rte_config.h \
-I$S/../common -o $@ $<
install : $(DESTDIR)$(libdir)/$(SOLIB)
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* [dpdk-dev] [memnic PATCH 16/16] pkg: add recipe for RPM
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
` (14 preceding siblings ...)
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 15/16] pmd: remove useless makefile variables Thomas Monjalon
@ 2014-02-04 15:54 ` Thomas Monjalon
15 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-02-04 15:54 UTC (permalink / raw)
To: dev
Packages can be built with:
rpmbuild -ta memnic-1.1.tar.gz
There are packages for kernel module and PMD versions.
Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
---
pkg/rpm.spec | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 95 insertions(+)
create mode 100644 pkg/rpm.spec
diff --git a/pkg/rpm.spec b/pkg/rpm.spec
new file mode 100644
index 0000000..a5183f0
--- /dev/null
+++ b/pkg/rpm.spec
@@ -0,0 +1,95 @@
+# Copyright 2014 6WIND S.A.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# - Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# - Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# - Neither the name of 6WIND S.A. nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+# OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Name: memnic
+Version: 1.0
+Release: 1
+Packager: packaging@6wind.com
+URL: http://dpdk.org/doc/memnic-pmd
+Source: http://dpdk.org/browse/memnic/snapshot/memnic-%{version}.tar.gz
+
+Summary: MEMNIC
+Group: System Environment/Libraries
+License: BSD and GPLv2
+
+ExclusiveArch: i686, x86_64
+%define target %{_arch}-default-linuxapp-gcc
+
+%description
+Dummy main package. Make only subpackages.
+
+%package -n dpdk-memnic
+BuildRequires: dpdk-core-devel
+Requires: dpdk-core-runtime
+Summary: MEMNIC driver for Intel(r) Data Plane Development Kit
+%description -n dpdk-memnic
+MEMNIC is a paravirtualized network interface (PMD) based
+on memory copy and introduced by NEC.
+It has similar concepts to virtio-net, but does not use the vring framework.
+Instead, it is based on a queue of mailboxed packets which are copied
+in IVSHMEM between the host and the guest.
+
+%define datadir %{_datadir}/dpdk
+%define docdir %{_docdir}/dpdk
+
+%package kmod
+BuildRequires: kernel-devel
+Summary: MEMNIC kernel driver
+%description kmod
+MEMNIC is a paravirtualized network interface (netdevice driver) based
+on memory copy and introduced by NEC.
+It has similar concepts to virtio-net, but does not use the vring framework.
+Instead, it is based on a queue of mailboxed packets which are copied
+in IVSHMEM between the host and the guest.
+
+%define modroot /lib/modules/%(uname -r)
+%define kerneldir %{modroot}/build
+%define moddir %{modroot}/extra
+
+%prep
+%setup -q
+
+%build
+make %{?_smp_mflags} -C pmd RTE_INCLUDE=%{datadir}/%{target}/include
+make %{?_smp_mflags} -C %{kerneldir} M=$(pwd)/linux
+
+%install
+rm -rf %{buildroot}
+make install -C pmd DESTDIR=%{buildroot} libdir=%{_libdir} docdir=%{docdir}
+make modules_install -C %{kerneldir} M=$(pwd)/linux INSTALL_MOD_PATH=%{buildroot}
+rm -f %{buildroot}%{modroot}/modules.*
+
+%files -n dpdk-memnic
+%{_libdir}/*
+%doc %{docdir}
+
+%files kmod
+%{moddir}/*
--
1.7.10.4
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script
2014-02-04 15:54 ` [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script Thomas Monjalon
@ 2014-02-24 16:03 ` Chris Wright
2014-03-20 17:06 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Chris Wright @ 2014-02-24 16:03 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
* Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> In order to make this tool available among other system commands,
> the name must be more specific.
>
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Looks reasonable to rename since it's not a generic script.
Acked-by: Chris Wright <chrisw@redhat.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 02/16] virtio: rename library
2014-02-04 15:54 ` [dpdk-dev] [PATCH 02/16] virtio: rename library Thomas Monjalon
@ 2014-02-24 16:05 ` Chris Wright
2014-03-20 17:06 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Chris Wright @ 2014-02-24 16:05 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
* Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> In order to distinguish clearly this implementation from the extension
> virtio-net-pmd, it is renamed to reflect its usage of uio framework.
>
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Also simple prep work for rpm build. Good idea to distinguish from
non-uio
Acked-by: Chris Wright <chrisw@redhat.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-02-04 15:54 ` [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM Thomas Monjalon
@ 2014-02-24 16:29 ` Chris Wright
2014-02-24 16:52 ` Chris Wright
2014-02-26 13:07 ` Thomas Graf
2 siblings, 0 replies; 52+ messages in thread
From: Chris Wright @ 2014-02-24 16:29 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
* Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> Packages can be built with:
> RPM_BUILD_NCPUS=8 rpmbuild -ta dpdk-1.5.2r2.tar.gz
>
> There are packages for runtime, static libraries and development.
> Once devel package installed, it can be used like this:
> make -C /usr/share/dpdk/examples/helloworld RTE_SDK=/usr/share/dpdk
>
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> ---
> pkg/rpm.spec | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This should be dpdk.spec
> 1 file changed, 143 insertions(+)
> create mode 100644 pkg/rpm.spec
>
> diff --git a/pkg/rpm.spec b/pkg/rpm.spec
> new file mode 100644
> index 0000000..d806d55
> --- /dev/null
> +++ b/pkg/rpm.spec
> @@ -0,0 +1,143 @@
> +Name: dpdk
> +Version: 1.5.2r1
need to check of NVR properly increases. looks ok, I used the tool
'rpmdev-vercmp' to verify
> +Release: 1
> +Packager: packaging at 6wind.com
> +URL: http://dpdk.org
> +Source: http://dpdk.org/browse/dpdk/snapshot/dpdk-%{version}.tar.gz
> +
> +Summary: Intel(r) Data Plane Development Kit
> +Group: System Environment/Libraries
> +License: BSD and LGPLv2 and GPLv2
> +
> +ExclusiveArch: i686, x86_64
> +%define target %{_arch}-default-linuxapp-gcc
Why this?
> +%define machine default
> +
> +BuildRequires: kernel-devel, kernel-headers, doxygen
> +
> +%description
> +Dummy main package. Make only subpackages.
Why not make the core package include .so?
The -devel package would then include headers, and I don't htink you
need a static (.a) package because it's not encouraged to ship static
libraries:
https://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Static_Libraries
If you had to update a .a file, e.g. due to security issue, any
applications using static library would not receive the update w/out
rebuilding.
> +%package core-runtime
> +Summary: Intel(r) Data Plane Development Kit core for runtime
> +%description core-runtime
> +Intel(r) DPDK runtime includes kernel modules, core libraries and tools.
> +testpmd application allows to test fast packet processing environments
> +on x86 platforms. For instance, it can be used to check that environment
> +can support fast path applications such as 6WINDGate, pktgen, rumptcpip, etc.
> +More libraries are available as extensions in other packages.
This is an unusual name. I don't have a better suggestion right now,
will think about it for the moment.
> +%package core-static
> +Requires: %{name}-core-runtime
> +Summary: Intel(r) Data Plane Development Kit core as static libraries
> +%description core-static
> +Intel(r) DPDK static provides static version of the core libraries
> +for fast packet processing on x86 platforms.
> +More libraries are available as extensions in other packages.
Think we can eliminate this one.
> +%package core-devel
> +Requires: %{name}-core-static
> +Summary: Intel(r) Data Plane Development Kit core for development
> +%description core-devel
> +Intel(r) DPDK devel is a set of makefiles, headers, examples and documentation
> +for fast packet processing on x86 platforms.
> +More libraries are available as extensions in other packages.
This looks fine to keep (often it's just headers, but in this case the
makefiles and examples are part of 'how to develop' a dpdk app).
> +# debuginfo packaging is broken
> +%define debug_package %{nil}
> +
> +%define destdir %{buildroot}%{_prefix}
> +%define moddir /lib/modules/%(uname -r)/extra
> +%define datadir %{_datadir}/%{name}
> +%define docdir %{_docdir}/%{name}
> +
> +%prep
> +%setup -q
> +
> +%build
> +make O=%{target} T=%{target} config
Have you considering fixing the build system to allow writing directly
to the RPM_BUILD_ROOT? (this would eliminate all the cp/rmdir below at
%install stage).
> +sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config
> +sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config
> +sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' %{target}/.config
> +make O=%{target} %{?_smp_mflags}
> +cp %{target}/lib/*.so %{target}
> +sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config
> +make O=%{target} %{?_smp_mflags}
> +make O=%{target} doc
> +
> +%install
> +rm -rf %{buildroot}
> +make O=%{target} DESTDIR=%{destdir}
> +mkdir -p %{buildroot}%{moddir}
> +mv %{destdir}/%{target}/kmod/*.ko %{buildroot}%{moddir}
usually the install command is used (install -d will create directories)
I'm pulling depedencies to do a test build, will comment if anything
further comes up.
thanks,
-chris
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-02-04 15:54 ` [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM Thomas Monjalon
2014-02-24 16:29 ` Chris Wright
@ 2014-02-24 16:52 ` Chris Wright
2014-04-02 9:01 ` Thomas Monjalon
2014-02-26 13:07 ` Thomas Graf
2 siblings, 1 reply; 52+ messages in thread
From: Chris Wright @ 2014-02-24 16:52 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
* Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> Packages can be built with:
> RPM_BUILD_NCPUS=8 rpmbuild -ta dpdk-1.5.2r2.tar.gz
>
> There are packages for runtime, static libraries and development.
> Once devel package installed, it can be used like this:
> make -C /usr/share/dpdk/examples/helloworld RTE_SDK=/usr/share/dpdk
>
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> ---
> pkg/rpm.spec | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
This should be dpdk.spec
> 1 file changed, 143 insertions(+)
> create mode 100644 pkg/rpm.spec
>
> diff --git a/pkg/rpm.spec b/pkg/rpm.spec
> new file mode 100644
> index 0000000..d806d55
> --- /dev/null
> +++ b/pkg/rpm.spec
> @@ -0,0 +1,143 @@
> +Name: dpdk
> +Version: 1.5.2r1
> +Release: 1
Just wanted to be sure the NVR properly increases. I verified using
"rpmdev-vercmp" and it looks fine.
> +Packager: packaging@6wind.com
> +URL: http://dpdk.org
> +Source: http://dpdk.org/browse/dpdk/snapshot/dpdk-%{version}.tar.gz
> +
> +Summary: Intel(r) Data Plane Development Kit
> +Group: System Environment/Libraries
> +License: BSD and LGPLv2 and GPLv2
> +
> +ExclusiveArch: i686, x86_64
> +%define target %{_arch}-default-linuxapp-gcc
What is this for?
> +%define machine default
> +
> +BuildRequires: kernel-devel, kernel-headers, doxygen
> +
> +%description
> +Dummy main package. Make only subpackages.
I think the core package should have the .so, the -devel package w/
headers, and no -static package. Including a .a file is discouraged in
Fedora:
https://fedoraproject.org/wiki/Packaging:Guidelines#Packaging_Static_Libraries
because if you need to update the archive, e.g. for a security fix,
applications linked w/ the static library will not get fixed w/out a
rebuild.
> +%package core-runtime
perhaps just 'runtime'
> +Summary: Intel(r) Data Plane Development Kit core for runtime
> +%description core-runtime
> +Intel(r) DPDK runtime includes kernel modules, core libraries and tools.
> +testpmd application allows to test fast packet processing environments
> +on x86 platforms. For instance, it can be used to check that environment
> +can support fast path applications such as 6WINDGate, pktgen, rumptcpip, etc.
> +More libraries are available as extensions in other packages.
> +
> +%package core-static
> +Requires: %{name}-core-runtime
> +Summary: Intel(r) Data Plane Development Kit core as static libraries
> +%description core-static
> +Intel(r) DPDK static provides static version of the core libraries
> +for fast packet processing on x86 platforms.
> +More libraries are available as extensions in other packages.
We drop this
> +%package core-devel
name this devel
> +Requires: %{name}-core-static
> +Summary: Intel(r) Data Plane Development Kit core for development
> +%description core-devel
> +Intel(r) DPDK devel is a set of makefiles, headers, examples and documentation
> +for fast packet processing on x86 platforms.
> +More libraries are available as extensions in other packages.
Often it's just headers, but makefile, examples, etc are quite useful
for showing how to develop a dpdk app
> +# debuginfo packaging is broken
> +%define debug_package %{nil}
Can you add a better comment why it's broken?
> +%define destdir %{buildroot}%{_prefix}
> +%define moddir /lib/modules/%(uname -r)/extra
> +%define datadir %{_datadir}/%{name}
> +%define docdir %{_docdir}/%{name}
> +
> +%prep
> +%setup -q
> +
> +%build
> +make O=%{target} T=%{target} config
Did you try to update the build system to output into $RPM_BUILD_ROOT
directly? It's much preferred compared to the cp/rmdir below
> +sed -ri 's,(RTE_MACHINE=).*,\1%{machine},' %{target}/.config
> +sed -ri 's,(RTE_APP_TEST=).*,\1n,' %{target}/.config
> +sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1y,' %{target}/.config
> +make O=%{target} %{?_smp_mflags}
> +cp %{target}/lib/*.so %{target}
> +sed -ri 's,(RTE_BUILD_SHARED_LIB=).*,\1n,' %{target}/.config
> +make O=%{target} %{?_smp_mflags}
> +make O=%{target} doc
> +
> +%install
> +rm -rf %{buildroot}
> +make O=%{target} DESTDIR=%{destdir}
Why make again (IOW, why not in %build section)?
> +mkdir -p %{buildroot}%{moddir}
> +mv %{destdir}/%{target}/kmod/*.ko %{buildroot}%{moddir}
Normally I'd use install command (-d will create directories)
> +rmdir %{destdir}/%{target}/kmod
> +mkdir -p %{buildroot}%{_sbindir}
> +ln -s %{datadir}/tools/igb_uio_bind.py %{buildroot}%{_sbindir}/igb_uio_bind
> +mkdir -p %{buildroot}%{_bindir}
> +mv %{destdir}/%{target}/app/testpmd %{buildroot}%{_bindir}
> +rmdir %{destdir}/%{target}/app
> +mv %{destdir}/%{target}/include %{buildroot}%{_includedir}
> +mv %{destdir}/%{target}/lib %{buildroot}%{_libdir}
> +mv %{destdir}/%{target}/*.so %{buildroot}%{_libdir}
> +mkdir -p %{buildroot}%{docdir}
> +mv %{destdir}/%{target}/doc/* %{buildroot}%{docdir}
> +rmdir %{destdir}/%{target}/doc
> +mkdir -p %{buildroot}%{datadir}
> +mv %{destdir}/%{target}/.config %{buildroot}%{datadir}/config
> +mv %{destdir}/%{target} %{buildroot}%{datadir}
> +mv %{destdir}/mk %{buildroot}%{datadir}
> +cp -a examples %{buildroot}%{datadir}
> +cp -a tools %{buildroot}%{datadir}
> +ln -s %{datadir}/config %{buildroot}%{datadir}/%{target}/.config
> +ln -s %{_includedir} %{buildroot}%{datadir}/%{target}/include
> +ln -s %{_libdir} %{buildroot}%{datadir}/%{target}/lib
> +
> +%files core-runtime
> +%dir %{datadir}
> +%{datadir}/config
> +%{datadir}/tools
> +%{moddir}/*
> +%{_sbindir}/*
> +%{_bindir}/*
> +%{_libdir}/*.so
> +
> +%files core-static
> +%{_libdir}/*.a
> +
> +%files core-devel
> +%{_includedir}/*
> +%{datadir}/mk
> +%{datadir}/%{target}
> +%{datadir}/examples
> +%doc %{docdir}
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 05/16] pmd: allow to build outside of the source directory
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 05/16] pmd: allow to build outside of the source directory Thomas Monjalon
@ 2014-02-24 18:13 ` Chris Wright
2014-03-26 21:59 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Chris Wright @ 2014-02-24 18:13 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
* Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> S specify source directory (when not already in).
> O specify output directory (when different of current one).
Thanks for adding docs into help too. Looks good to me.
Acked-by: Chris Wright <chrisw@redhat.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 04/16] pmd: add make help
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 04/16] pmd: add make help Thomas Monjalon
@ 2014-02-24 18:17 ` Chris Wright
2014-03-26 21:59 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Chris Wright @ 2014-02-24 18:17 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
* Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> Add help for quick tips.
> Also define CC and remove RTE_CONFIG variable.
Straight forward addition of help text (useful, thanks) and simple clean
up. Looks good to me.
Acked-by: Chris Wright <chrisw@redhat.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-02-04 15:54 ` [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM Thomas Monjalon
2014-02-24 16:29 ` Chris Wright
2014-02-24 16:52 ` Chris Wright
@ 2014-02-26 13:07 ` Thomas Graf
2014-02-26 16:19 ` Chris Wright
2014-04-02 9:53 ` Thomas Monjalon
2 siblings, 2 replies; 52+ messages in thread
From: Thomas Graf @ 2014-02-26 13:07 UTC (permalink / raw)
To: Thomas Monjalon, dev
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> Packages can be built with:
> RPM_BUILD_NCPUS=8 rpmbuild -ta dpdk-1.5.2r2.tar.gz
>
> There are packages for runtime, static libraries and development.
> Once devel package installed, it can be used like this:
> make -C /usr/share/dpdk/examples/helloworld RTE_SDK=/usr/share/dpdk
>
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Thanks for getting this started! Some comments below. I'll be glad to
help pushing this into Fedora.
> +Name: dpdk
> +Version: 1.5.2r1
> +Release: 1
What kind of upgrade strategy do you have in mind?
I'm raising this because Fedora and other distributions will require
a unique package name for every version of the package that is not
backwards compatible.
Typically libraries provide backwards compatible within a major release,
i.e. all 1.x.x releases would be compatible. I realize that this might
not be applicable yet but maybe 1.5.x?
Depending on the versioning schema the name would be dpdk15, dpdk16, ...
or dpdk152, dpdk153, ...
> +BuildRequires: kernel-devel, kernel-headers, doxygen
Is a python environment required as well?
> +%description
> +Dummy main package. Make only subpackages.
I would just call the main package "libdpdk152" so you don't have to
repeat the encoding versioning in all the subpackages.
> +
> +%package core-runtime
What about calling it just "libdpdk"?
> +Summary: Intel(r) Data Plane Development Kit core for runtime
> +%description core-runtime
> +Intel(r) DPDK runtime includes kernel modules, core libraries and tools.
> +testpmd application allows to test fast packet processing environments
> +on x86 platforms. For instance, it can be used to check that environment
> +can support fast path applications such as 6WINDGate, pktgen, rumptcpip, etc.
> +More libraries are available as extensions in other packages.
> +
> +%package core-static
Based on the above: "libdpdk-static"
Packages that link against dpdk statically will do:
BuildRequire: libdpdk152-static
> +%files core-runtime
> +%dir %{datadir}
> +%{datadir}/config
> +%{datadir}/tools
> +%{moddir}/*
> +%{_sbindir}/*
> +%{_bindir}/*
> +%{_libdir}/*.so
This brings up the question of multiple parallel DPDK installations.
A specific application linking to library version X will also require
tools of version X, right? A second application linking against version
Y will require tools version Y. Right now, these could not be installed
in parallel. Any chance we can make the runtime version independent?
Same applies to header files. A good option here would be to install
them to /usr/include/libdpdk{version}/ and have a dpdk-1.5.2.pc which
provides Cflags: -I${includedir}/libdpdk${version}
> +%files core-static
> +%{_libdir}/*.a
> +
> +%files core-devel
> +%{_includedir}/*
> +%{datadir}/mk
> +%{datadir}/%{target}
> +%{datadir}/examples
> +%doc %{docdir}
>
You'll also need for all packages and subpackages installing shared
libraries:
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM Thomas Monjalon
@ 2014-02-26 13:22 ` Thomas Graf
2014-04-02 10:08 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Thomas Graf @ 2014-02-26 13:22 UTC (permalink / raw)
To: Thomas Monjalon, dev
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> +BuildRequires: dpdk-core-devel, kernel-devel, kernel-headers
> +Requires: dpdk-core-runtime
How does the compatibility mapping look like? I assume a given vmxnet3
version can only be linked against certain dpdk versions? We need to
encode that mapping in the spec file somehow.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-02-26 13:07 ` Thomas Graf
@ 2014-02-26 16:19 ` Chris Wright
2014-04-02 9:53 ` Thomas Monjalon
1 sibling, 0 replies; 52+ messages in thread
From: Chris Wright @ 2014-02-26 16:19 UTC (permalink / raw)
To: Thomas Graf; +Cc: dev
* Thomas Graf (tgraf@redhat.com) wrote:
> On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> >Packages can be built with:
> > RPM_BUILD_NCPUS=8 rpmbuild -ta dpdk-1.5.2r2.tar.gz
> >
> >There are packages for runtime, static libraries and development.
> >Once devel package installed, it can be used like this:
> > make -C /usr/share/dpdk/examples/helloworld RTE_SDK=/usr/share/dpdk
> >
> >Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
>
> Thanks for getting this started! Some comments below. I'll be glad to
> help pushing this into Fedora.
>
> >+Name: dpdk
> >+Version: 1.5.2r1
> >+Release: 1
>
> What kind of upgrade strategy do you have in mind?
>
> I'm raising this because Fedora and other distributions will require
> a unique package name for every version of the package that is not
> backwards compatible.
>
> Typically libraries provide backwards compatible within a major release,
> i.e. all 1.x.x releases would be compatible. I realize that this might
> not be applicable yet but maybe 1.5.x?
>
> Depending on the versioning schema the name would be dpdk15, dpdk16, ...
> or dpdk152, dpdk153, ...
>
> >+BuildRequires: kernel-devel, kernel-headers, doxygen
>
> Is a python environment required as well?
>
> >+%description
> >+Dummy main package. Make only subpackages.
>
> I would just call the main package "libdpdk152" so you don't have to
> repeat the encoding versioning in all the subpackages.
>
> >+
> >+%package core-runtime
>
> What about calling it just "libdpdk"?
>
> >+Summary: Intel(r) Data Plane Development Kit core for runtime
> >+%description core-runtime
> >+Intel(r) DPDK runtime includes kernel modules, core libraries and tools.
> >+testpmd application allows to test fast packet processing environments
> >+on x86 platforms. For instance, it can be used to check that environment
> >+can support fast path applications such as 6WINDGate, pktgen, rumptcpip, etc.
> >+More libraries are available as extensions in other packages.
> >+
> >+%package core-static
>
> Based on the above: "libdpdk-static"
>
> Packages that link against dpdk statically will do:
> BuildRequire: libdpdk152-static
>
> >+%files core-runtime
> >+%dir %{datadir}
> >+%{datadir}/config
> >+%{datadir}/tools
> >+%{moddir}/*
> >+%{_sbindir}/*
> >+%{_bindir}/*
> >+%{_libdir}/*.so
>
> This brings up the question of multiple parallel DPDK installations.
> A specific application linking to library version X will also require
> tools of version X, right? A second application linking against version
> Y will require tools version Y. Right now, these could not be installed
> in parallel. Any chance we can make the runtime version independent?
>
> Same applies to header files. A good option here would be to install
> them to /usr/include/libdpdk{version}/ and have a dpdk-1.5.2.pc which
> provides Cflags: -I${includedir}/libdpdk${version}
>
> >+%files core-static
> >+%{_libdir}/*.a
> >+
> >+%files core-devel
> >+%{_includedir}/*
> >+%{datadir}/mk
> >+%{datadir}/%{target}
> >+%{datadir}/examples
> >+%doc %{docdir}
> >
>
> You'll also need for all packages and subpackages installing shared
> libraries:
>
> %post -p /sbin/ldconfig
> %postun -p /sbin/ldconfig
Yes, thanks, I meant to mention that too.
Details here:
https://fedoraproject.org/wiki/Packaging:Guidelines#Shared_Libraries
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script
2014-02-24 16:03 ` Chris Wright
@ 2014-03-20 17:06 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-20 17:06 UTC (permalink / raw)
To: Chris Wright; +Cc: dev
24/02/2014 08:03, Chris Wright :
> * Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> > In order to make this tool available among other system commands,
> > the name must be more specific.
> >
> > Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
>
> Looks reasonable to rename since it's not a generic script.
>
> Acked-by: Chris Wright <chrisw@redhat.com>
Pushed for 1.6.0r2.
Thank you
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 02/16] virtio: rename library
2014-02-24 16:05 ` Chris Wright
@ 2014-03-20 17:06 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-20 17:06 UTC (permalink / raw)
To: Chris Wright; +Cc: dev
24/02/2014 08:05, Chris Wright :
> * Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> > In order to distinguish clearly this implementation from the extension
> > virtio-net-pmd, it is renamed to reflect its usage of uio framework.
> >
> > Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
>
> Also simple prep work for rpm build. Good idea to distinguish from
> non-uio
>
> Acked-by: Chris Wright <chrisw@redhat.com>
Pushed for 1.6.0r2.
Thank you
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 04/16] pmd: add make help
2014-02-24 18:17 ` Chris Wright
@ 2014-03-26 21:59 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-26 21:59 UTC (permalink / raw)
To: Chris Wright; +Cc: dev
2014-02-24 10:17, Chris Wright:
> * Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> > Add help for quick tips.
> > Also define CC and remove RTE_CONFIG variable.
>
> Straight forward addition of help text (useful, thanks) and simple clean
> up. Looks good to me.
>
> Acked-by: Chris Wright <chrisw@redhat.com>
Applied, thanks
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 05/16] pmd: allow to build outside of the source directory
2014-02-24 18:13 ` Chris Wright
@ 2014-03-26 21:59 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-26 21:59 UTC (permalink / raw)
To: Chris Wright; +Cc: dev
2014-02-24 10:13, Chris Wright:
> * Thomas Monjalon (thomas.monjalon@6wind.com) wrote:
> > S specify source directory (when not already in).
> > O specify output directory (when different of current one).
>
> Thanks for adding docs into help too. Looks good to me.
>
> Acked-by: Chris Wright <chrisw@redhat.com>
Applied, thanks
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 06/16] pmd: allow to install lib and doc
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 06/16] pmd: allow to install lib and doc Thomas Monjalon
@ 2014-03-26 22:00 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-26 22:00 UTC (permalink / raw)
To: dev
2014-02-04 16:54:
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Applied
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 08/16] pmd: fix initialization of Tx queue header
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 08/16] pmd: fix initialization of Tx queue header Thomas Monjalon
@ 2014-03-27 8:23 ` Olivier MATZ
2014-03-27 9:34 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Olivier MATZ @ 2014-03-27 8:23 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
Hello Thomas,
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> A typo was found by gcc-4.8:
> virtio_user.c:744:15: error: argument to 'sizeof' in 'memset' call is the
> same expression as the destination; did you mean to dereference it?
> [-Werror=sizeof-pointer-memaccess]
> sizeof(tq->tx_hdrs[sz - 1].header));
> ^
>
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 09/16] mk: minor fixes
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 09/16] mk: minor fixes Thomas Monjalon
@ 2014-03-27 8:26 ` Olivier MATZ
2014-03-27 9:35 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Olivier MATZ @ 2014-03-27 8:26 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> Fix help.
> Also define CC and remove RTE_CONFIG variable.
>
> Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 10/16] mk: allow to build outside of the source directory
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 10/16] mk: allow to build outside of the source directory Thomas Monjalon
@ 2014-03-27 8:31 ` Olivier MATZ
2014-03-27 9:35 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Olivier MATZ @ 2014-03-27 8:31 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> S specify source directory (when not already in).
> O specify output directory (when different of current one).
>
> Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 11/16] mk: allow to install lib and doc
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 11/16] mk: allow to install lib and doc Thomas Monjalon
@ 2014-03-27 8:32 ` Olivier MATZ
2014-03-27 9:35 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Olivier MATZ @ 2014-03-27 8:32 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [memnic PATCH 13/16] pmd: rename doc when installing
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 13/16] pmd: rename doc when installing Thomas Monjalon
@ 2014-03-27 8:36 ` Olivier MATZ
2014-03-27 10:29 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Olivier MATZ @ 2014-03-27 8:36 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
Hi Thomas,
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> MEMNIC doc may be installed with other DPDK docs.
> So more descriptive naming is required.
>
> A rule is created in order to have the same rule style for lib and doc.
>
> Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
> ---
> pmd/Makefile | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/pmd/Makefile b/pmd/Makefile
> index 7f96af1..1e24a15 100644
> --- a/pmd/Makefile
> +++ b/pmd/Makefile
[...]
> +install : $(DESTDIR)$(docdir)/$(DOC)
> +$(DESTDIR)$(docdir)/$(DOC) : $S/README.rst
> + install -D -m 644 $< $@
> +
What about renaming README.rst in dpdk-memnic.rst in source ?
The rest of the patch looks good to me.
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [memnic PATCH 14/16] pmd: fix doc uninstalling
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 14/16] pmd: fix doc uninstalling Thomas Monjalon
@ 2014-03-27 8:45 ` Olivier MATZ
2014-03-27 10:30 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Olivier MATZ @ 2014-03-27 8:45 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> ---
> pmd/Makefile | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/pmd/Makefile b/pmd/Makefile
> index 1e24a15..730b126 100644
> --- a/pmd/Makefile
> +++ b/pmd/Makefile
> @@ -79,6 +79,8 @@ endif
> uninstall :
> - rm -f $(DESTDIR)$(libdir)/$(SOLIB)
> - rmdir -p $(DESTDIR)$(libdir) 2>&-
> + - rm -f $(DESTDIR)$(docdir)/$(DOC)
> + - rmdir -p $(DESTDIR)$(docdir) 2>&-
>
> help :
> @ echo 'rules:'
>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [memnic PATCH 15/16] pmd: remove useless makefile variables
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 15/16] pmd: remove useless makefile variables Thomas Monjalon
@ 2014-03-27 8:45 ` Olivier MATZ
2014-03-27 10:30 ` Thomas Monjalon
0 siblings, 1 reply; 52+ messages in thread
From: Olivier MATZ @ 2014-03-27 8:45 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
> ---
> pmd/Makefile | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/pmd/Makefile b/pmd/Makefile
> index 730b126..5edc44e 100644
> --- a/pmd/Makefile
> +++ b/pmd/Makefile
> @@ -29,10 +29,7 @@
> # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
> # OF THE POSSIBILITY OF SUCH DAMAGE.
>
> -PKG = librte_pmd_memnic_copy
> -
> -RTE_CONFIG = $(RTE_INCLUDE)/rte_config.h
> -SOLIB = $(PKG).so
> +SOLIB = librte_pmd_memnic_copy.so
> DOC = dpdk-memnic.rst
>
> S ?= .
> @@ -59,7 +56,7 @@ ifeq '$(RTE_INCLUDE)' ''
> @ echo 'ERROR: RTE_INCLUDE is not set' && false
> endif
> $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) \
> - -I$(RTE_INCLUDE) -include $(RTE_CONFIG) \
> + -I$(RTE_INCLUDE) -include $(RTE_INCLUDE)/rte_config.h \
> -I$S/../common -o $@ $<
>
> install : $(DESTDIR)$(libdir)/$(SOLIB)
>
Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 08/16] pmd: fix initialization of Tx queue header
2014-03-27 8:23 ` Olivier MATZ
@ 2014-03-27 9:34 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-27 9:34 UTC (permalink / raw)
To: Olivier MATZ; +Cc: dev
> > A typo was found by gcc-4.8:
> > virtio_user.c:744:15: error: argument to 'sizeof' in 'memset' call is the
> > same expression as the destination; did you mean to dereference it?
> > [-Werror=sizeof-pointer-memaccess]
> >
> > sizeof(tq->tx_hdrs[sz - 1].header));
> >
> > ^
> >
> > Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
>
> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Applied, thanks
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 09/16] mk: minor fixes
2014-03-27 8:26 ` Olivier MATZ
@ 2014-03-27 9:35 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-27 9:35 UTC (permalink / raw)
To: Olivier MATZ; +Cc: dev
> > Fix help.
> > Also define CC and remove RTE_CONFIG variable.
> >
> > Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
>
> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Applied, thanks
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 10/16] mk: allow to build outside of the source directory
2014-03-27 8:31 ` Olivier MATZ
@ 2014-03-27 9:35 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-27 9:35 UTC (permalink / raw)
To: Olivier MATZ; +Cc: dev
> > S specify source directory (when not already in).
> > O specify output directory (when different of current one).
> >
> > Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
>
> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Applied, thanks
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [virtio-net-pmd PATCH 11/16] mk: allow to install lib and doc
2014-03-27 8:32 ` Olivier MATZ
@ 2014-03-27 9:35 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-27 9:35 UTC (permalink / raw)
To: Olivier MATZ; +Cc: dev
> > Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
>
> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Applied, thanks
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [memnic PATCH 13/16] pmd: rename doc when installing
2014-03-27 8:36 ` Olivier MATZ
@ 2014-03-27 10:29 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-27 10:29 UTC (permalink / raw)
To: Olivier MATZ; +Cc: dev
> > MEMNIC doc may be installed with other DPDK docs.
> > So more descriptive naming is required.
> >
> > A rule is created in order to have the same rule style for lib and doc.
> >
> > Signed-off-by: Thomas Monjalon<thomas.monjalon@6wind.com>
>
> [...]
>
> > +$(DESTDIR)$(docdir)/$(DOC) : $S/README.rst
> > + install -D -m 644 $< $@
>
> What about renaming README.rst in dpdk-memnic.rst in source ?
I'm not convinced. README is a good name when looking in source tree.
> The rest of the patch looks good to me.
>
> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Applied
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [memnic PATCH 14/16] pmd: fix doc uninstalling
2014-03-27 8:45 ` Olivier MATZ
@ 2014-03-27 10:30 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-27 10:30 UTC (permalink / raw)
To: Olivier MATZ; +Cc: dev
> > Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
>
> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Applied
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [memnic PATCH 15/16] pmd: remove useless makefile variables
2014-03-27 8:45 ` Olivier MATZ
@ 2014-03-27 10:30 ` Thomas Monjalon
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-03-27 10:30 UTC (permalink / raw)
To: Olivier MATZ; +Cc: dev
> > Signed-off-by: Thomas Monjalon <thomas.monjalon@6wind.com>
>
> Reviewed-by: Olivier Matz <olivier.matz@6wind.com>
Applied
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-02-24 16:52 ` Chris Wright
@ 2014-04-02 9:01 ` Thomas Monjalon
2014-04-02 11:11 ` Thomas Graf
0 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-04-02 9:01 UTC (permalink / raw)
To: Chris Wright; +Cc: dev
Hello,
Sorry for the long delay.
2014-02-24 08:52, Chris Wright:
> > pkg/rpm.spec | 143
>
> This should be dpdk.spec
Actually it should be dpdk-core.spec.
Since it is a file hosted in the project, is it mandatory to have such naming?
Could you explain why?
When building it with "rpmbuild -ta dpdk.tar.gz", the .spec name has no
importance.
> > +ExclusiveArch: i686, x86_64
> > +%define target %{_arch}-default-linuxapp-gcc
>
> What is this for?
Multi-targets builds are supported in DPDK Makefiles. So the target must be
explicited when building.
Is it OK to define such variable here?
> > +%description
> > +Dummy main package. Make only subpackages.
>
> I think the core package should have the .so, the -devel package w/
> headers, and no -static package. Including a .a file is discouraged in
> Fedora
OK
> > +%package core-runtime
>
> perhaps just 'runtime'
[...]
> > +%package core-devel
>
> name this devel
No, dpdk-core is a name to differentiate the main component and the extensions
such as dpdk-memnic.
So we should have dpdk-core and dpdk-core-devel. Do you agree?
> > +# debuginfo packaging is broken
> > +%define debug_package %{nil}
>
> Can you add a better comment why it's broken?
Yes, I think it's due to direct use of ld linker.
> > +make O=%{target} T=%{target} config
>
> Did you try to update the build system to output into $RPM_BUILD_ROOT
> directly? It's much preferred compared to the cp/rmdir below
Probably we could change the build system but it should be another patch.
> > +%install
> > +rm -rf %{buildroot}
> > +make O=%{target} DESTDIR=%{destdir}
>
> Why make again (IOW, why not in %build section)?
This one is for installing files only. Isn't it the role of %install?
> > +mv %{destdir}/%{target}/kmod/*.ko %{buildroot}%{moddir}
>
> Normally I'd use install command (-d will create directories)
Yes but here the strategy is to dispatch some files and keep the remaining
ones in %{datadir}.
Thanks for the review
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-02-26 13:07 ` Thomas Graf
2014-02-26 16:19 ` Chris Wright
@ 2014-04-02 9:53 ` Thomas Monjalon
2014-04-02 11:04 ` Thomas Graf
2014-04-02 11:29 ` Neil Horman
1 sibling, 2 replies; 52+ messages in thread
From: Thomas Monjalon @ 2014-04-02 9:53 UTC (permalink / raw)
To: Thomas Graf; +Cc: dev
Hello,
Sorry for the long delay.
2014-02-26 14:07, Thomas Graf:
> On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> > +Version: 1.5.2r1
> > +Release: 1
>
> What kind of upgrade strategy do you have in mind?
>
> I'm raising this because Fedora and other distributions will require
> a unique package name for every version of the package that is not
> backwards compatible.
>
> Typically libraries provide backwards compatible within a major release,
> i.e. all 1.x.x releases would be compatible. I realize that this might
> not be applicable yet but maybe 1.5.x?
>
> Depending on the versioning schema the name would be dpdk15, dpdk16, ...
> or dpdk152, dpdk153, ...
We are working on this but at the moment there is no restriction on API/ABI
breakage. So I think it's too early to define such rule.
> > +BuildRequires: kernel-devel, kernel-headers, doxygen
>
> Is a python environment required as well?
Python is only needed to run some tools on the target. But is is optional.
Do you think it should be written somewhere?
> > +%description
> > +Dummy main package. Make only subpackages.
>
> I would just call the main package "libdpdk152" so you don't have to
> repeat the encoding versioning in all the subpackages.
>
> > +
> > +%package core-runtime
>
> What about calling it just "libdpdk"?
In this case, it should be libdpdk-core in order to distinguish it from dpdk
extensions. But the name of the project is dpdk so it seems simpler to call it
dpdk-core.
Is the "lib" prefix mandatory for libraries?
> > +%files core-runtime
> > +%dir %{datadir}
> > +%{datadir}/config
> > +%{datadir}/tools
> > +%{moddir}/*
> > +%{_sbindir}/*
> > +%{_bindir}/*
> > +%{_libdir}/*.so
>
> This brings up the question of multiple parallel DPDK installations.
> A specific application linking to library version X will also require
> tools of version X, right? A second application linking against version
> Y will require tools version Y. Right now, these could not be installed
> in parallel. Any chance we can make the runtime version independent?
Are you thinking about installing different major versions? In my
understanding, we cannot install 2 different minor versions of a package.
As long as there is no stable API, there is no major versions defined.
So don't you think we should speak about it later?
> Same applies to header files. A good option here would be to install
> them to /usr/include/libdpdk{version}/ and have a dpdk-1.5.2.pc which
> provides Cflags: -I${includedir}/libdpdk${version}
Yes same applies :)
I agree that a .pc file would be a good idea. But we also must allow to build
with the DPDK framework.
> You'll also need for all packages and subpackages installing shared
> libraries:
>
> %post -p /sbin/ldconfig
> %postun -p /sbin/ldconfig
OK
Thanks for the review
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM
2014-02-26 13:22 ` Thomas Graf
@ 2014-04-02 10:08 ` Thomas Monjalon
2014-04-02 11:07 ` Thomas Graf
0 siblings, 1 reply; 52+ messages in thread
From: Thomas Monjalon @ 2014-04-02 10:08 UTC (permalink / raw)
To: Thomas Graf; +Cc: dev
2014-02-26 14:22, Thomas Graf:
> On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> > +BuildRequires: dpdk-core-devel, kernel-devel, kernel-headers
> > +Requires: dpdk-core-runtime
>
> How does the compatibility mapping look like? I assume a given vmxnet3
> version can only be linked against certain dpdk versions? We need to
> encode that mapping in the spec file somehow.
Since vmxnet3-usermap-1.1, any dpdk >= 1.3 is supported.
But RPM packaging is not supported for these old versions.
So do you think it's needed to encode a restriction for these old versions?
--
Thomas
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-04-02 9:53 ` Thomas Monjalon
@ 2014-04-02 11:04 ` Thomas Graf
2014-04-02 11:29 ` Neil Horman
1 sibling, 0 replies; 52+ messages in thread
From: Thomas Graf @ 2014-04-02 11:04 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 04/02/2014 11:53 AM, Thomas Monjalon wrote:
> 2014-02-26 14:07, Thomas Graf:
>>> +BuildRequires: kernel-devel, kernel-headers, doxygen
>>
>> Is a python environment required as well?
>
> Python is only needed to run some tools on the target. But is is optional.
> Do you think it should be written somewhere?
Not sure what target is in this context. You only need to list it if
a python environment must be present at build time.
>> What about calling it just "libdpdk"?
>
> In this case, it should be libdpdk-core in order to distinguish it from dpdk
> extensions. But the name of the project is dpdk so it seems simpler to call it
> dpdk-core.
> Is the "lib" prefix mandatory for libraries?
Not at all. You are free to name the package. The mandatory part is that
runtime and development files must be separated and the development
files such as headers will go into a -devel package.
dpdk-core
dpdk-core-devel
>> This brings up the question of multiple parallel DPDK installations.
>> A specific application linking to library version X will also require
>> tools of version X, right? A second application linking against version
>> Y will require tools version Y. Right now, these could not be installed
>> in parallel. Any chance we can make the runtime version independent?
>
> Are you thinking about installing different major versions? In my
> understanding, we cannot install 2 different minor versions of a package.
> As long as there is no stable API, there is no major versions defined.
> So don't you think we should speak about it later?
That's right, you can't install multiple versions of the same package
unless you name them differently. This is why we need to come up with a
strategy how to handle naming and upgrades now, before we push it into
Fedora.
Example:
Let's assume we push DPDK 1.6.0 into Fedora as 'dpdk-core' with NVR
dpdk-core-1.6.0-1. Let's assume we later push Open vSwitch 2.2 into
Fedora which will consume DPDK 1.6.0 via "Requires: dpdk-core = 1.6.0"
We can't do dpdk-core >= 1.6.0 because there is no compatibility.
DPDK 1.6.1 gets released and we push it as dpdk-core-1.6.1-1. We then
push dpdk-pktgen into Fedora which is based on DPDK 1.6.1 and requires
"dpdk-core = 1.6.1". Users won't be able to install both OVS and
dpdk-ptkgen in parallel at this point because they can't install both
1.6.0 and 1.6.1.
Fedora inclusion will require a strategy to resolve this. A unique name
for each release is an option (Every DPDK release is currently a new
major release). This can slowly transform into compatible releases once
stable ABIs are in place.
Unique names is not enough though as multiple packages would still
attempt to install the same file, e.g. header files. This would be
typically resolved by installing headers and other non versioned files
with a prefix as outlined below. This leaves the problems of tool
versioning as they also seem to be bound to specific DPDK versions but
can't be prefixed as they need to be part of $PATH.
So while we don't have to enforce stable ABIs at this point we have to
account for the lack of it in the packaging names and packaging
structure.
Packages could be named
dpdk-1.6.0-core
dpdk-1.6.0-core-devel
....
https://fedoraproject.org/wiki/Packaging:NamingGuidelines#General_Naming
>> Same applies to header files. A good option here would be to install
>> them to /usr/include/libdpdk{version}/ and have a dpdk-1.5.2.pc which
>> provides Cflags: -I${includedir}/libdpdk${version}
>
> Yes same applies :)
> I agree that a .pc file would be a good idea. But we also must allow to build
> with the DPDK framework.
Definitely.
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM
2014-04-02 10:08 ` Thomas Monjalon
@ 2014-04-02 11:07 ` Thomas Graf
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Graf @ 2014-04-02 11:07 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On 04/02/2014 12:08 PM, Thomas Monjalon wrote:
> 2014-02-26 14:22, Thomas Graf:
>> On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
>>> +BuildRequires: dpdk-core-devel, kernel-devel, kernel-headers
>>> +Requires: dpdk-core-runtime
>>
>> How does the compatibility mapping look like? I assume a given vmxnet3
>> version can only be linked against certain dpdk versions? We need to
>> encode that mapping in the spec file somehow.
>
> Since vmxnet3-usermap-1.1, any dpdk >= 1.3 is supported.
> But RPM packaging is not supported for these old versions.
> So do you think it's needed to encode a restriction for these old versions?
The restriction is only needed if RPM packages for these old versions
actually exist.
On a more general note: While it is extremely nice to have this spec
file to ease the building process. Fedora does not allow inclusion of
external kernel modules:
https://fedoraproject.org/wiki/Packaging:Guidelines#No_External_Kernel_Modules
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-04-02 9:01 ` Thomas Monjalon
@ 2014-04-02 11:11 ` Thomas Graf
0 siblings, 0 replies; 52+ messages in thread
From: Thomas Graf @ 2014-04-02 11:11 UTC (permalink / raw)
To: Thomas Monjalon, Chris Wright; +Cc: dev
On 04/02/2014 11:01 AM, Thomas Monjalon wrote:
> Hello,
>
> Sorry for the long delay.
>
> 2014-02-24 08:52, Chris Wright:
>>> pkg/rpm.spec | 143
>>
>> This should be dpdk.spec
>
> Actually it should be dpdk-core.spec.
> Since it is a file hosted in the project, is it mandatory to have such naming?
> Could you explain why?
> When building it with "rpmbuild -ta dpdk.tar.gz", the .spec name has no
> importance.
You are right, it doesn't matter for external building but this would
likely get pointed at in the Fedora package review process.
https://fedoraproject.org/wiki/Packaging:NamingGuidelines#Spec_file_name
^ permalink raw reply [flat|nested] 52+ messages in thread
* Re: [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM
2014-04-02 9:53 ` Thomas Monjalon
2014-04-02 11:04 ` Thomas Graf
@ 2014-04-02 11:29 ` Neil Horman
1 sibling, 0 replies; 52+ messages in thread
From: Neil Horman @ 2014-04-02 11:29 UTC (permalink / raw)
To: Thomas Monjalon; +Cc: dev
On Wed, Apr 02, 2014 at 11:53:51AM +0200, Thomas Monjalon wrote:
> Hello,
>
> Sorry for the long delay.
>
> 2014-02-26 14:07, Thomas Graf:
> > On 02/04/2014 04:54 PM, Thomas Monjalon wrote:
> > > +Version: 1.5.2r1
> > > +Release: 1
> >
> > What kind of upgrade strategy do you have in mind?
> >
> > I'm raising this because Fedora and other distributions will require
> > a unique package name for every version of the package that is not
> > backwards compatible.
> >
> > Typically libraries provide backwards compatible within a major release,
> > i.e. all 1.x.x releases would be compatible. I realize that this might
> > not be applicable yet but maybe 1.5.x?
> >
> > Depending on the versioning schema the name would be dpdk15, dpdk16, ...
> > or dpdk152, dpdk153, ...
>
> We are working on this but at the moment there is no restriction on API/ABI
> breakage. So I think it's too early to define such rule.
>
Now that you have DSO builds in place, theres no reason not to take the extra
step of versioning your API's, making backwards compatibility fairly
straightforward. Monolithic builds are still somewhat problematic regarding API
stability, but you could certainly offer stability in the DSOs.
> > > +BuildRequires: kernel-devel, kernel-headers, doxygen
> >
> > Is a python environment required as well?
>
> Python is only needed to run some tools on the target. But is is optional.
> Do you think it should be written somewhere?
>
> > > +%description
> > > +Dummy main package. Make only subpackages.
> >
> > I would just call the main package "libdpdk152" so you don't have to
> > repeat the encoding versioning in all the subpackages.
> >
> > > +
> > > +%package core-runtime
> >
> > What about calling it just "libdpdk"?
>
The version name should be left out of the library name, whatever you do.
Packaging can be responsible for versioning.
> In this case, it should be libdpdk-core in order to distinguish it from dpdk
> extensions. But the name of the project is dpdk so it seems simpler to call it
> dpdk-core.
> Is the "lib" prefix mandatory for libraries?
>
Not strictly, but IIRC if you don't add the lib, the linker won't find it with
the -l option, so you'll want to add it.
> > > +%files core-runtime
> > > +%dir %{datadir}
> > > +%{datadir}/config
> > > +%{datadir}/tools
> > > +%{moddir}/*
> > > +%{_sbindir}/*
> > > +%{_bindir}/*
> > > +%{_libdir}/*.so
> >
> > This brings up the question of multiple parallel DPDK installations.
> > A specific application linking to library version X will also require
> > tools of version X, right? A second application linking against version
> > Y will require tools version Y. Right now, these could not be installed
> > in parallel. Any chance we can make the runtime version independent?
>
> Are you thinking about installing different major versions? In my
> understanding, we cannot install 2 different minor versions of a package.
> As long as there is no stable API, there is no major versions defined.
> So don't you think we should speak about it later?
>
If the versioning is done properly (i.e shared libraries get version ids
attached to the library files properly), you can install as many library
versions as you like. You can only install a single -devel package, since it
links lib<name>.so to a specific version.
> > Same applies to header files. A good option here would be to install
> > them to /usr/include/libdpdk{version}/ and have a dpdk-1.5.2.pc which
> > provides Cflags: -I${includedir}/libdpdk${version}
>
> Yes same applies :)
> I agree that a .pc file would be a good idea. But we also must allow to build
> with the DPDK framework.
>
> > You'll also need for all packages and subpackages installing shared
> > libraries:
> >
> > %post -p /sbin/ldconfig
> > %postun -p /sbin/ldconfig
>
> OK
>
> Thanks for the review
> --
> Thomas
>
^ permalink raw reply [flat|nested] 52+ messages in thread
end of thread, other threads:[~2014-04-02 11:28 UTC | newest]
Thread overview: 52+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-04 15:54 [dpdk-dev] [PATCH 00/16] recipes for RPM packages Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [PATCH 01/16] tools: rename pci_unbind script Thomas Monjalon
2014-02-24 16:03 ` Chris Wright
2014-03-20 17:06 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [PATCH 02/16] virtio: rename library Thomas Monjalon
2014-02-24 16:05 ` Chris Wright
2014-03-20 17:06 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [PATCH 03/16] pkg: add recipe for RPM Thomas Monjalon
2014-02-24 16:29 ` Chris Wright
2014-02-24 16:52 ` Chris Wright
2014-04-02 9:01 ` Thomas Monjalon
2014-04-02 11:11 ` Thomas Graf
2014-02-26 13:07 ` Thomas Graf
2014-02-26 16:19 ` Chris Wright
2014-04-02 9:53 ` Thomas Monjalon
2014-04-02 11:04 ` Thomas Graf
2014-04-02 11:29 ` Neil Horman
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 04/16] pmd: add make help Thomas Monjalon
2014-02-24 18:17 ` Chris Wright
2014-03-26 21:59 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 05/16] pmd: allow to build outside of the source directory Thomas Monjalon
2014-02-24 18:13 ` Chris Wright
2014-03-26 21:59 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 06/16] pmd: allow to install lib and doc Thomas Monjalon
2014-03-26 22:00 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [vmxnet3-usermap PATCH 07/16] pkg: add recipe for RPM Thomas Monjalon
2014-02-26 13:22 ` Thomas Graf
2014-04-02 10:08 ` Thomas Monjalon
2014-04-02 11:07 ` Thomas Graf
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 08/16] pmd: fix initialization of Tx queue header Thomas Monjalon
2014-03-27 8:23 ` Olivier MATZ
2014-03-27 9:34 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 09/16] mk: minor fixes Thomas Monjalon
2014-03-27 8:26 ` Olivier MATZ
2014-03-27 9:35 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 10/16] mk: allow to build outside of the source directory Thomas Monjalon
2014-03-27 8:31 ` Olivier MATZ
2014-03-27 9:35 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 11/16] mk: allow to install lib and doc Thomas Monjalon
2014-03-27 8:32 ` Olivier MATZ
2014-03-27 9:35 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [virtio-net-pmd PATCH 12/16] pkg: add recipe for RPM Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 13/16] pmd: rename doc when installing Thomas Monjalon
2014-03-27 8:36 ` Olivier MATZ
2014-03-27 10:29 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 14/16] pmd: fix doc uninstalling Thomas Monjalon
2014-03-27 8:45 ` Olivier MATZ
2014-03-27 10:30 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 15/16] pmd: remove useless makefile variables Thomas Monjalon
2014-03-27 8:45 ` Olivier MATZ
2014-03-27 10:30 ` Thomas Monjalon
2014-02-04 15:54 ` [dpdk-dev] [memnic PATCH 16/16] pkg: add recipe for RPM Thomas Monjalon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).