Stop Avid Link from starting at boot

TL;DR Avid Link starts at boot, and there is no setting in the app to prevent launching at boot. I hate software that doesn’t allow me to control whether it starts automatically!

To stop Avid Link from launching on macOS at boot, run the following command from a Terminal. It is a long line, so make sure to copy the whole thing. You will be asked for your password.

sudo defaults write /Library/LaunchAgents/com.avid.avidlink.plist RunAtLoad -boolean false

To again allow Avid Link to start at boot, run the same command again, changing the “false” to “true”.

Background

I’m not a fan of software makers taking action on my computers without my awareness. One of the most annoying things companies do is that they install something that starts at every boot – without asking – because they mistakenly believe that their software always needs to be running, and that I as a user am not smart enough to make that decision on my own. Even worse than not asking is not even giving the permission to stop the software from starting at boot.

As you can see, Avid Link gives me no option to disable the launch at boot, only that it is hidden after launch.

Looking in the standard location for controlling such things (System Preferences > Users & Groups > Login Items), Avid Link isn’t listed.

As you can see, I’m not against things starting at boot, only things that I cannot control!

Crucial CT16G4SFD824A RAM works in the Synology DS1819+

[Update 2021-02-06] I finally got around to purchasing a new 16GB stick, and I’m now successfully running 32GB in my Synology 1819+.

[Update 2020-04-20] My Synology has been responding slowly during FCPX edits, so I decided to revisit the RAM that I purchased. It turns out that one of the two 16GB sticks must be bad because I tried the 16+4 stick setup as mentioned earlier, and it wouldn’t boot. I tried the other 16GB stick and it booted quickly. Annoying. The problem was a bad stick all along.

Below is the original post from 18 Dec 2019.

I recently bought two sticks of Crucial 16GB DDR4-2400 SODIMM 1.2V CL17 non-ECC RAM (CT16G4SFD824A) hoping that I could upgrade my Synology DS1819+ from 4GB to 32GB. Unfortunately, when both sticks of the RAM are installed, the NAS doesn’t boot, and instead simply blinks the power light indefinitely (even after waiting 45min).

I did find that when I installed one 16GB stick alongside the existing 4GB stick, the system would boot, recognize the stick and report 20GB of RAM, but it also gave the warning about non-Synology RAM. I’m guessing this is because the RAM I purchased was non-ECC, whereas the Synology RAM is ECC.

For now, I’m returning to my 4GB configuration.

Using a TC Electronic DBMax for live streaming

This post describes using a TC Electronic DBMax to enhance the audio of a live stream.

In a live streaming situation, control of audio levels is critical to providing listeners and viewers with a great auditory experience. Inconsistent levels, or levels that are too loud or too soft result in a suboptimal experience, which degrades the performance.

The TC Electronic DBMax (Digital Broadcast Maximizer) is an ideal device for stabilizing and enhancing audio for live streaming and live recording situations. It supports up to three pre-dynamic inserts (AGC, Parametric EQ, 90 deg. mono, Dynamic Equalizer, Stereo Enhance, Normalizer, MS Decoding and MS Encoding), an expander, compressor and limiter, and a single post-dynamic insert (Transmission Limiter or Production Limiter). The EQ, compressors, and limiters are all 5-band, and provide broadcast quality results. It is basically a Finalizer 96K on steroids.

This image has an empty alt attribute; its file name is DBMAX-INCL.-DIGITAL-BYPASS-BROADCAST-MAXIMIZER-II_P0CXM_Front_L.png

In my role as recording lead at ICF, I use two separate DBMax devices to solve two separate problems. 1) stabilize the FoH signal for video, and 2) boost the stabilized signal for streaming. Once I put these two devices in, the video team I work with thanked me multiple times as they have a stable audio level they can rely on for single every event, no matter what kind of event, and they love the audio quality.

The first DBMax balances audio levels between a live worship session, where audio levels during worship are 10–15dB louder than the normal speaking volumes, and speaking sessions. The goal is to provide a signal that roughly meets the -23 LUFS broadcast standard in Europe, which means the audio recorded for video needs no additional post-processing for release to public TV (which we do for special events).

  • The feed coming from the FoH board is limited (with the Waves L2 Ultramaximizer), which provides a known maximum audio level.
  • The first insert is the Normalizer, which gives a small 3dB boost to the the overall audio level. The focus is to bring speaking parts into a better working range for later processing.
  • The second insert is the AGC (Automatic Gain Controller), which automatically raises the volume by up to 3dB (for soft speaking), or reduces it by up to -20dB (for loud band numbers).
  • The third insert is Stereo Enhance. The FoH provides signal for the main audience, but the stereo image in a live situation is typically reduced so that audience members on the far left/right sides don’t hear only a mono left or right signal. This insert provides a wider and more natural signal for TV viewing.
  • The 5-band expander is not used.
  • The 5-band compressor does a decent amount of compression, typically several DB. The advantage of a 5-band compressor is that kick and tom hits will not result in the overall signal being compressed, giving a more transparent sound.
  • The 5-band limiter catches loud peaks that might have made it past the compressor and AGC.
  • The last insert is the Production Limiter, which limits the overall sound signal. It is rarely triggered, and is mostly there to catch anything left.

The second DBMax takes the audio from the first DBMax, and boosts it to roughly -14 LUFS for live streaming on internet, and for streaming to TVs throughout the building (e.g. for parents in the children’s area). The -14 LUFS level was chosen as both YouTube and Apple both use this standard, and signals recorded from this DBMax require no additional post-processing for release to those streaming platforms (for video or podcasts).

  • The first insert is the Parametric EQ, which boots the signal 9dB, and applies a shallow high-pass and low-pass filter to strip off extra energy that laptop speakers and most headphones cannot reproduce.
  • The second insert the Spectral Stereo Image, which widens signals above 50 Hz, making for a better experience on headphones or laptops.
  • The third insert is the AGC, which makes minor signal adjustments of ±3dB to produce more consistent results.
  • The 5-band expander is not used.
  • The 5-band compressor provides fast and light 2.0:1 compression, and a 3.9 dB boost.
  • The 5-band limiter catches loud peaks that might have made it past the compressor.
  • The last insert is the Production Limiter, which limits the overall sound signal. It is rarely triggered, and is mostly there to catch anything left.

For those who are curious, the DBMax introduces roughly a 5ms delay into the audio signal chain, which must be compensated for when aligning the audio and video signals together. The video signals I’m working with have an 80ms latency delay, so I apply an additional 75ms delay using a Behringer X32 console, which was a console already available to me.

If you are interested in buying a used DBMax, they can frequently be found on eBay in the $700–1500 price range. New they are $4000+, so the used price is quite good. With patience, I’ve purchased three in the $700-$800 range. Try to purchase a device with the v2.60 or v2.90 firmware as the v2.02 firmware has a several minor issues that were fixed in the v2.60 release.

If you’d like to know more, let me know in the comments. For the actual settings, see this Google spreadsheet.

Additional Resources

Willow Creek FAQ: Broadcast Audio Process. This article describes how Willow Creek uses the DBMax.

HyperDeck multi-mono audio to surround

I recently made a recording with a Blackmagic Design HyperDeck 12G from an HDMI source which had 5.1 audio. Unfortunately, the HyperDeck recorded 16 independent mono channels, which meant that everything was on the center channel when I imported it into Final Cut Pro X. In addition, the C and LFE channels were swapped in the same manner that Media Express swaps them.

To fix the issue, I was able to use a similar command to what I used for fixing recordings from Media Express (see my post on that issue). The one change was using “-map 0:1” as the HyperDeck stores the video as Stream #0. This command has the nice side-effect of stripping the extra unused audio channels from the file, which also reduces the file size.

ffmpeg -i input.mov \
-c:v copy \
-filter_complex \
"pan=6c|c0=c0|c1=c1|c2=c3|c3=c2|c4=c4|c5=c5[out1]" \
-map 0:1 -map [out1] -c:a pcm_s24le \
output.mov

I also have some 7.1 sources, and for them I’ll be using a slightly modified version of the command.

ffmpeg -i input.mov \
-c:v copy \
-filter_complex \
"pan=8c|c0=c0|c1=c1|c2=c3|c3=c2|c4=c4|c5=c5|c6=c6|c7=c7[out1]" \
-map 0:0 -map [out1] -c:a pcm_s24le \
output.mov

Media Express C/LFE channel swap

Media Express by Blackmagic Design incorrectly swaps the C (Center) and LFE (low-frequency effects) channels on 5.1 surround material. This can be fixed using the ffmpeg command.

TL;DR

I recently purchased a Blackmagic Design UltraStudio 4K to do some recording from HDMI sources. Recordings must be made using the provided Media Express software, which is fine, except for the fact that the C and LFE audio channels are swapped in 5.1 material. As you can see in this screenshot, the spoken word coming through the center channel is on channel #4 instead of channel #3.

For reference

  • The standard 5.1 channel order for Wave files is: L, R, C, LFE, Ls, Rs
  • The non-standard Media Express 5.1 channel order is: L, R, LFE, C, Ls, LR

After significant troubleshooting, I found a solution using ffmpeg from the command-line to swap the C and LFE channels. The remaining steps require a working ffmpeg installation. I haven’t found a standalone version for macOS, but it is available via Homebrew.

HOWTO: Swap C and LFE channels on .mov file written by Media Express. Replace the input.mov and output.mov filenames as appropriate. The actual magic happens with the c2=3|c3=2 part of the –filter_complex flag.

ffmpeg -i input.mov \
-filter_complex "pan=6c|c0=c0|c1=c1|c2=c3|c3=c2|c4=c4|c5=c5[out1]" \
-map 0:0 -c:v copy \
-map [out1] -c:a pcm_s24le \
output.mov

If by chance you’ve already worked on a broken file with Final Cut Pro and want to fix the channel ordering on the exported file, the command is only slightly different—change the -map 0:0 to -map 0:1. FCP writes video as stream #0 and audio as stream #1, whereas ME writes audio as stream #0.

ffmpeg -i input.mov \
-filter_complex "pan=6c|c0=c0|c1=c1|c2=c3|c3=c2|c4=c4|c5=c5[out1]" \
-map 0:1 -c:v copy \
-map [out1] -c:a pcm_s24le \
output.mov

References

  • [Blackmagic Forum] Audio: LFE and Center channels being switched. I made a post on Jan 19, 2019 with similar information to that above.

Avid S3L-X, AVB, and the Netgear GS724Tv4 network switch

I’m part of the audio team at ICF, and learned that we had an unused Netgear GS724Tv4  network switch lying around. The switch was originally purchased to connect multiple AVB devices together, similar to the MOTU AVB Switch, but with more ports, and because the MOTU doesn’t work with the Avid S3L. Unfortunately, nobody had ever gotten it to work with AVB, so I took a stab and wrote up the instructions below.

Using a Netgear GS724Tv4 network switch to pass AVB between a Mac Pro and the Avid S3L-X

I can confirm that the switch works (firmware version 6.3.1.19 tested).

Starting with factory default settings, here are the step-by-step instructions. These instructions came from Updating Netgear GS724Tv4 config for Tesira AVnu certification with one small modification.

  1. Click on the Switching tab, then click on the Auto-VoIP sub-page. In the “Protocol Based Port Settings” table, click the checkbox in the top-left corner to select all ports and enable Auto VoIP Mode for all ports. Then, click Apply in the bottom-right corner.
  2. Click on the 802.1AS sub-page. Set the 802.1AS Status to Enable. Then, click Apply in the bottom-right corner. There will be an EAV advisory note which pops up after you hit Apply, which you can ignore.
  3. While still on the 802.1AS sub-page click on the Advanced > 802.1AS Port Settings. In the purple header row at the top of the list select the check box to select all ports. (Consider to uncheck ports g25 and g26 to prevent AVB traffic flowing into the backbone network.) Enter a value of 5000 for the Pdelay Threshold. Then, click Apply in the bottom-right corner.
  4. Click on the MRP sub-page. Set the MSRP Mode to Enable. Ensure that all other options are disabled. Also, set MSRP Max Fan In Ports to 26. Then, click Apply in the bottom-right corner. There will be an EAV advisory note which pops up after you hit Apply, which you can ignore.
  5. While still on the MRP sub-page click on the Advanced > MRP Port Settings. In the purple header row at the top of the list click the checkbox to select all ports and then select Enable for MVRP Mode and MSRP Mode and enter values of 20 for the Join Time, 120 for the Leave Timer, and 2500 for the Leave All Timer. Then, click Apply in the bottom-right corner.
  6. Click on the VLAN sub-page. Under the Advanced settings choose Voice VLAN Configuration. Enable the Voice VLAN Global Admin Mode at the top of the page. Then, click Apply in the bottom-right corner.
  7. While still on the VLAN sub-page, under the Advanced settings choose VLAN Membership. In the VLAN ID dropdown choose VLAN ID 2, in the Group Operation dropdown choose Tag All. Click the T for ports 25 and 26 to untag these. Finally, click Apply in the bottom-right corner.
  8. Click on the Switching > LAG sub-page. In the purple header row at the top of the LAG Configuration list select the check box to select all ports, uncheck ch25 and ch26, and select Disable for Admin Mode, STP Mode, and Link Trap.  Then, click Apply in the bottom-right corner.
  9. Power cycle the switch.

The one small modification to the instructions was in step 4, where I removed references to MVRP. In my experience, enabling MVRP will cause the E3 to lose connection to its internal network switch, and the only way to fix this is to cleanly shutdown the E3, then remove the power plug and wait for the green power light to go out. I did not test enabling it for everything except the E3. (Apparently this is a known issue — search for VSW-10570 in the “What’s New in VENUE 4.6.1” document that comes with the VENUE 4.6.1 release.)

If you want to use Dante and AVB together, I suggest reading the Using Dante and AVB protocols together on the Netgear GS724Tv4 switch document. As of 2018-01-22 I haven’t tested those instructions.

Booting an Avid S3L-X remotely with Wake-on-LAN

E3 Engine

The E3 engine can be remotely powered on and started using the Wake-on-LAN protocol.

To remotely wake the E3 engine, you need three things:

  1. A computer that is connected to the same Ethernet network as the E3 engine.
  2. The MAC address of the engine. You can get the MAC address by going to the Options > Devices tab and right-clicking on the E3 engine image.
  3. The IP subnet address of the network. (Optional, depending on the software used.)

To shut the E3 engine down, use the VENUE Options > System > Shutdown button.

Software to wake the E3 engine

There are several software packages available to send the special Wake-on-LAN Magic Packet.

Mac

  • Wake On Lan by Depicus (Mac App Store, $1.99)
  • Remote Desktop (Apple, $79.99) – Also useful for controlling the S3L-X remotely.

Windows

  • MagicPacket by DecaTec (Microsoft Store, Free)
  • Wake On Lan by Sepiro Ltd (Microsoft Store, Free)

Command-line

For those comfortable with the command-line, a short Python script will also do the job. Save this script somewhere as wakeonlan.py and make it executable with chmod +x.

#!/usr/bin/env python
# https://apple.stackexchange.com/questions/95246/wake-other-computers-from-mac-osx

import socket
import sys

if len(sys.argv) < 3:
 print "Usage: wakeonlan.py <ADR> <MAC> (example: 192.168.1.255 00:11:22:33:44:55)"
 sys.exit(1)

mac = sys.argv[2]
data = ''.join(['FF' * 6, mac.replace(':', '') * 16])
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
sock.sendto(data.decode("hex"), (sys.argv[1], 9))

Myself, I keep a copy of the script in my ~/usr/bin directory. To wake my system, I call the command like this, where 172.16.0.255 is the subnet of my network, and 00:90:fb:4a:13:9e the MAC address of my E3 engine.

$ ~/usr/bin/wakeonlan.py 172.16.0.255 00:90:fb:4a:13:9e

Stage 16 Box

The Stage 16 Box cannot be remotely power cycled without additional equipment. Some suggestions include:

  • Furman CN-1800S + Furman BB-RS232 giving control via Ethernet.
  • Furman M-8S (US) or the Furman PS-8RE III (Europe) connected to the GPIO connection from the E3 engine, along with an event (saved in the default show) to latch a GPIO when the system is started. Attempt only if you feel comfortable with electronics. If you would like me to build this setup and demonstrate it, send me an email.

My struggle to setup a Linksys WRT54GS v.4 in client-bridge mode

The problem

I’ve been fighting for weeks now trying to get my home wireless network to work smoothly. I’m living in an apartment in Ireland, built in the 1970’s, that has concrete walls for every single wall in the house. It does wonders for my wireless signal, and to date the only thing that has provided a decent (albeit not strong) signal in all rooms was a Linksys WAP54G.

I recently purchased my first Mac desktop (the wonderful Apple 27″ iMac with the quad-core i7 chip). It is a brilliant machine, the fastest I’ve ever owned, and I didn’t want to limit it with a slow wireless connection. My partner and I both have Mac laptops as well, and I wanted to see a speed improvement there too. Finally, we both have Wifi enabled phones, I have an iPod, there are a couple of AirPort Express for broadcasting iTunes music and sharing a printer, an AppleTV for renting movies, and a Popcorn Hour A-110 that we stream movies to (using one of the AirPort Express as a bridge).
To improve my network, I went with the latest Apple AirPort Extreme (Simultaneous Dual-Band II). My hope was that I could 802.11n at 5GHz for the Macs, and 802.11n and 802.11g at 2.4GHz for the rest. Unfortunately though, despite MUCH fiddling (trying lots of channels, fiddling with this that and the other, etc.), I kept running into problems. First off, the only place in the apartment where I could get a usable 5GHz signal (decent as defined by sustaining more than 3MiB/s transfers) was at the kitchen table about 5m away from the AirPort (through one wall). In my bedroom (about 10m away from the AirPort and through three walls) where the 27″ iMac is, I usually could get between 24-144Mbps signal (never constant) and could usually sustain around 1.7MiB/s transfers. And, I could not for the life of me get a good streaming signal – one that always worked without pauses – to stream movies to the Popcorn Hour in the living room (about 10m away and two walls). Sometimes, yes, but not always. This situation is actually worse than it was before!
I must say that I love the AirPort Express for its ease of configuration, and its IPv6 support, but it just isn’t working for me with the vast amount of concrete I have.

To try to solve my problems with my iMac, I decided to configure an old Linksys WRT54GS I have in a client-bridge configuration. The Linksys has two spiffy antennas with potentially better gain than the built-in antenna of the iMac. I chose the WRT54GS as it has a built-in switch – which would be nice to have in the bedroom – whereas the WAP54G I used in the past has only a single port.
As it turns out, after spending literally hours trying to get such a configuration working, the solution was incredibly simple. I found lots of interesting but conflicting information on the web about how to do this, but was unable to get any of it to work. I must be honest and state that I did not want to use the nvram command to do the configuration. I just find that such by-hand configurations are hard to reproduce should I need to someday, and prefer to have a documented, easy-to-understand, and repeatable solution instead.
I finally decided to forge ahead without docs to see what I could get going.
The solution


This section assumes a cleanly installed OpenWrt firmware on the router. (See below on how to reflash with TFTP if you need.) It also assumes you are logged into the more advanced Administration mode (not the default Essentials mode) of the OpenWrt interface.
Configure the WAN interface (Network > Interfaces > WAN)
I changed nothing here.
wan
Protocol: DHCP
Bridge interfaces: unchecked
Interface: eth0.1
Zone: wan
Configure the LAN interface (Network > Interfaces > LAN)

My local network subnet is 172.18.0/24 so I placed the LAN interface within that subnet. By doing this, I can telnet into the router without needing to specially configure a machine to talk to it.
lan
Protocol: static
Bridge interfaces: checked
Enable STP: unchecked
Interface: eth0.0
Zone: lan
IPv4-Address: 172.18.0.11
IPv4-Netmask: 255.255.255.0
IPv4-Gateway: 172.18.0.1
DNS-Server (added): 172.18.0.1
Click Save.

Configure the wireless to join my existing network (Network > Wifi > WL0)
Device wl0
enable: checked
Channel: auto
Transmit Power (dBm): 70
802.11h (added): checked
WMM Mode (added): checked
Interfaces
ESSID: KWAB
Network: lan
Mode: Client
Encryption: WPA2-PSK
Key: ******* (I’m not giving that up!! 😉 )
Click Save.
Switch (Network > Switch)
The Linksys WRT54GS v.4 uses slightly different VLAN ports than other routers. Basically, the WAN port is #0, whereas most other routers it is #4. I updated accordingly.
ETH0
ethX.0: 0 1 2 3 5*
ethX.1: 4 5
Click Save.
DHCP (Network > DHCP)
DHCP is enabled by default. It must be disabled. Uncheck the Dynamic DHCP option.
Click Save.
Apply all the changes (Changes > Save and Apply)
Once the settings are applied, the router should be pingable at 172.18.0.11 and the normal network should also be accessible using normal means (in my case DHCP). I have noticed that the router sometimes gets confused at this point, and a simple reboot [by pulling the plug] fixes that.
Enable multicasting
By default, the network interfaces do not support the full set of multicasting required for Bonjour and mDNS to work (two things I can’t live without with my Macs). To get them going, we need a quick shell script.
Edit the /etc/firewall.user script, and add these lines to it:
# enable full multicasting
for iface in br-lan eth0 eth0.0 eth0.1 wl0; do
ifconfig ${iface} allmulti
done
Run the script to setup the multicasting. In case you were wondering, Tte script will be executed automatically by the firewall script on subsequents boots.
We’re done!
The Result
After all was said and done… I still wasn’t happy 🙁
The iMac talking directly to the AirPort Extreme (jumping between 24-144Mbit/s as reported by the AirPort) was usually able to sustain 1.7MiB/s transfers, while the Linksys (jumping between 18-54Mbit/s as reported by the AirPort) could usually sustain only around 400KiB/s, more than 4x slower. Grumble.
I also use IPv6 on my network, but the Linksys isn’t bridging it through. It means when I do lookups for addresses like freenas.local (my NAS) I get the IPv6 address which I cannot talk to. There is probably a solution to that, but I haven’t looked into it yet.
In any case, back to the drawing board.
References
OpenWrt release: Kamakaze 8.09.2

Reflashing with TFTP
More than once, I locked myself out of the router during my fiddling. Luckily, OpenWrt has a default boot mode one can go into by holding down the reset button during power-on, releasing it once the DMZ LED lights. In this mode, the IP of the router returns [temporarily until reboot] to 192.186.1.1, and it allows telnet access without a password. Using telnet, I was able to manually erase the firmware, then reflash new firmware with TFTP.
To reset the router, I followed these steps:
  1. Placed a copy of OpenWrt in my ~/Downloads folder
  2. Changed to my ~/Downloads folder
    $ cd ~/Downloads
  3. Set a static IP on my laptop to 192.168.1.2
  4. Added a manual ARP entry (needed later for TFTP) to 192.168.1.2 (valid for OS X 10.5/10.6)
    $ sudo arp -s 192.168.1.1 00:16:b6:1e:a2:3f
  5. Telnetted into the router. For this to work, you must be plugged into the LAN portion of the router (the switch section) and not the WAN port (the Internet port).
    $ telnet 192.168.1.1
  6. Erased the flash on the router
    # mtd erase linux
  7. Pulled the power out of the router
  8. Started TFTP on my laptop
  9. $ tftp 192.168.1.1
    tftp> mode binary
    tftp> rexmt 1
    tftp> timeout 90
    tftp> trace
    Packet tracing on.
    tftp> put openwrt-wrt54gs_v4-squashfs.bin
  10. Plugged the router back in
  11. Waited for the firmware to flash. You should see something similar to this if the upload works:
    sent DATA 
    received ACK
    sent DATA
    received ACK
    ...
    sent DATA
    received ACK
    Sent 2166816 bytes in 61.9 seconds

    The number of blocks will of course be different for the release of OpenWrt you use.

The router will reboot on its own, and become available on the IP 192.168.1.1.

I’m up and running with IPv6

I don’t know why, but I got a bee in my bonnet today and decided to setup IPv6. As it turned out, I already had the necessary hardware (an Apple Time Machine which is also a full featured AirPort Extreme Base Station) and only needed a tunnel broker. After some googling, I came up with a list of several and decided to try one out.

The first one I tried was SixXS. After going through the sign-up and email verification, I was left waiting for validation of my data. Humpf. Not so fun. After waiting all of maybe two minutes, I decided to try another.

I rang up a friend from work to find out who he uses. He recommended Hurricane Electric so I gave them a try. All I can say is I was amazed how quickly and easily I got an account setup, and got my tunnel information. They even allow up to four tunnels on the account, which means I could set one up at my brother’s house as well.

The difficulties came in three areas.

  1. Getting the Time Capsule configured
  2. Getting my ADSL router to route packets to the Time Capsule
  3. Updating my WPAD files so that IPv6 traffic would not use my proxy

Configuring the Time Capsule

Hurricane provided me with the following information to setup my IPv6 tunnel with.

Server IPv4 address: 216.66.80.26
Server IPv6 address: 2001:470:1f08:71d::1/64
Client IPv4 address: 87.198.128.166
Client IPv6 address: 2001:470:1f08:71d::2/64
[Client] Routed /64: 2001:470:1f09:71d::/64

In AirPort Utility, I went into manual mode for the Time Capsule, selected Tunnel mode on the IPv6 page (Advanced > IPv6), and pasted the info in, including manually setting the LAN Prefix Length. (In case you were wondering, my firmware version 7.3.2, the /64 prefix is automatically stripped once Update is clicked).


Once the Time Capsule restarted, I looked at my network settings on my MacBook Pro, and found that I now had an IPv6 address that was in the LAN IPv6 range. I tried ping6 ipv6.google.com, but it didn’t work. After lots of troubleshooting, I realized that I could ping only the Local IPv6 address of the Time Capsule, but not the Removte IPv6 address. That made me think router.

Configuring the router

Honestly, this was a piece of cake once I figured out where all the settings were. Basically, I had to disable the firewall on the router and then set it to forward all packets to the Time Capsule (I set it as the default server). Once I had those two things, I was able to ping6 ipv6.google.com, but was unable to pull up http://ipv6.google.com/ in my browser.

Configuring WPAD

To make my life easier, I have WPAD (Web Proxy Autodiscovery Protocol) setup on my local network so that the Auto-detect proxy settings for this network works in Firefox. I use Squid for my proxy on separate Linux server, but unfortunately the version I use (3.0STABLE1 on Ubuntu 8.04) doesn’t support IPv6. (The newer 3.1 release apparently does, but I’m not in the mood to spend lots of time compiling a new binary today.) I did some googling and found that I could make a single minor change to my wpad.dat file to get things working.

The basic change was to add a dnsResolve() check that was then compared against anything with a “:” in it. IPv6 addresses have colons ‘:’ in them, but IPv4 addresses don’t. If an IPv6 address is found, the proxy gets skipped. (I’ll save Squid 3.1 for another rainy day).

Here’s the final version of my wpad.dat.

function FindProxyForURL(url, host) {
if (host == "localhost" || host == "127.0.0.1") { return "DIRECT"; }
if (isPlainHostName(host)) { return "DIRECT"; }
if (shExpMatch(host, "*.local")) { return "DIRECT"; }

// route ipv6 directly
if (shExpMatch(dnsResolve(host), "*:*")) { return "DIRECT"; }

return "PROXY 172.18.0.8:3128; DIRECT";
}

function LocalFindProxyForURL(url, host)
{
FindProxyForURL(url, host);
}

That is pretty much it. Overall the process was much simpler than I expected. Hopefully this helps someone else get their IPv6 running as well!