Enable pci passthrough for QEMU/KVM

I have a couple older HP ProLiant DL360 Gen 6 and Gen 7 Server I want to use as virtual machine hosts with some PCIe devices mapped through to the guests running there, let’s say so they can directly access the Fibre Channel ports on the host or whatnot. Here’s how to do it (running Ubuntu 14.04 LTS that is, YMMV with other distributions):

  1. Edit your /etc/default/grub and add the intel_iommu=on boot option, it should look something like this (serial console for ILO enabled as well)
    GRUB_CMDLINE_LINUX="console=tty0 console=ttyS1,115200n8 intel_iommu=on"
  2. Add the vfio module to the list in /etc/modules
    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.
    # Parameters can be specified after the module name.
    lp
    rtc
    vfio
  3. Create a file like /etc/modprobe.d/vfio.conf setting the allow_unsafe_interrupts option for the vfio module.
    options vfio_iommu_type1 allow_unsafe_interrupts=1

    Otherwise you’ll get an error when trying to start a VM with a PCI device passed through: “failed to set iommu for container: Operation not permitted”
    Apparently the IOMMU interrupt remapping is kinda broken on this platform.

  4. Reboot your server and create a VM with one of your PCIe adapters passed through – it should show up just like if was a native device on a real, physical server.

Updating a Cisco WIP 310

I recently got a used Cisco WIP 310 VoIP phone for fairly cheap and figured it would be nice to have a wireless handset as well. Or so I thought… because the thing still had it’s original firmware installed and turned out to be fucking useless. Couldn’t even get it to find my wireless network, let alone login or do anything but crash randomly.

Let’s see if there’s a new firmware available… great, it is! 5.0.13 as compared to 5.0.11 that was installed. But of course the firmware update via the supplied updater program didn’t work either. Manually copied the file to the handset and rebooted, came up with 5.0.11 again. Great…

So, long story short – here’s the way I finally managed to update it. Hope it helps someone else:

  1. Set up an open wireless network. For some reason the handset just wouldn’t work with my WPA2 secured network. You’ll need this only for the update procedure.
  2. In the wireless settings, change the IP configuration from DHCP to some static address on your network. Because for some reason DHCP didn’t work either…
  3. Now try to connect your WIP 310 to the network. It may take a couple of tries and/or reboots. Don’t ask me why, but eventually it did connect and I could ping the device.
  4. Open up the IP-Address of your phone in a web browser. Make sure the webserver is enabled: Settings -> Misc Settings -> Enable Web Server
  5. Go to ‘Admin Login’ on the upper right corner. On the ‘Ext 1’ tab set ‘Line Enable’ to ‘no’ and on the ‘Provisioning’ make sure ‘Upgrade Enable’ is set to yes
  6. Now for the magic… Extract the firmware image from the ZIP file and upload it to some Webserver. Make sure you can reach that server from your open wireless network so your phone can access that file.
  7. Schedule a firmware update via your browser: Go to http://your-phone-ip-address/admin/upgrade?http://your-server/path-to/wip310-5.0.13-04-26-2010.img
    You’ll get a message that the phone will update the firmware when idle. Wait a minute or two, maybe watch the Logfile on your webserver in case you have access. Eventually you’ll see a request by a client identifying as “Cisco/WIP310-5.0.11(10301355) (YOUR-PHONES-SERIAL)” or something like that.
  8. Wait for your phone to reboot. Reload the Admin Page in your browser to make sure it’s updated to 5.0.13

After that, you’ll notice the GUI on your phone looks a little different as well. And most importantly… it finally works. It also works with WPA2, hidden SSID networks and whatnot. It still has some bugs registering on some SIP servers. Even though it sometimes works, every now and then you’ll get a not registered error message. To fix that, take a look at the supplied PDF with the release notes. It tells you to change a couple settings:

  1. On the ‘SIP’ tab look for SIP Timer Values, the SIP T1 timer need to be changed from 0.5 to 2
  2. Also on the ‘SIP’ tab look for Response Status Code Handling, the Retry Reg RSC value needs to be set to 401
  3. Now got to the ‘Ext 1’ tab, set ‘Line Enable’ to yes again and enter your SIP settings to login to your SIP service.

After all that is done, the phone finally appears to be working the way it’s supposed to.

Why Thinkpads rock

So you’re in the market for a new notebook and wondering which one to get… Sure, those Macbooks are shiny and generally well built. Hell, even my heavily used and somewhat mistreated 8 year iBook G4 still works like a charm, albeit “a bit” slow by today’s standards. But if you’re concerned about durability, yet don’t want to log around a fully rugged Toughbook – nothing beats a IBM Lenovo Thinkpad.

[youtube http://www.youtube.com/watch?v=JXsDfuVctFk]

 

Built like a freaking tank!