Category Archives: Tools

Start Ookla Server on Boot – Mac OS X


OS X Server Daemon

I set up a new Ookla server on my Mac Mini. Everything was working well, but the server would not start automatically upon boot. My goal was to run this headless, so I wanted to be able to plug it in and fire it up without having to log in and start the daemon manually.

After much research, I found the way to do it, and will share the code I used.

This particular Mini is running OS X 10.9.5 Mavericks.

Assuming you have installed the LAMP package and Ookla server and licenses, we will proceed to add the daemon to OS X.

Create a plist file

OS X uses the /Library/LaunchDaemons files to start daemons as the root user.

Create a plist file with an appropriate name, I used com.ookla.start.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "">
<plist version="1.0">

Once the file is created in the /Library/LaunchDaemons folder, we can add to the launchctl list (use sudo, so the daemon is run as root).

sudo launchctl load com.ookla.start.plist

You can also view the list. Since mine is running, it also shows the PID.

sudo launchctl list | grep okla

82  -  com.ookla.start

To stop the daemon from loading, do the following.

sudo launchctl unload com.ookla.start.plist

Special thanks to Alvin Alexander for the tips to get this working!

Here’s a 1 Gig speedtest via GPON to my Mac Mini Server.

Screen Shot 2016-02-23 at 5.05.45 PM


Protected: Using Wireshark to Identify Packet Loss on Mediaroom IGMP Flows

This content is password protected. To view it please enter your password below:

Wireshark Filters – PPPoE, DHCP & VLAN ID

Using Filters

Wireshark comes standard with some very good filters. Filtering the displayed packets allows you to focus on relevant information located within the capture.

In this post, I’m going to show you how to filter out DHCP exchanges, PPPoE exchanges and VLAN’s.

Setting the Filter

Click on the filter field to enter the filter options manually, or press the Expression button to start the Wireshark filter expression box. When you are unfamiliar with which protocols you want to filter on, the Expression window allows you to choose each dissector and how the filter is applied (equals, contains, matches, less than, greater than).


Filtering on a VLAN tag is really quite simple using Wireshark’s built in dissector.

In the filter field, type in: == <put your vlan id here>

Press return to start the filtering process. Wireshark will then go through each packet in the capture file and display only those packets that match the criteria.


Filtering for DHCP packets is pretty easy in Wireshark also.

In the filter field, type in:


Press return to start the filtering process.


PPPoE is a little trickier to decode the entire process, as there are several steps in the process from PADI to IPCP negotitation.

In the filter field, type in:

pppoed or lcp or ipcp or pap or chap

Press return to start the filtering process.

This filter has several components that allow you to capture the entire PPPoE process from beginning to end.
The first part of the filter, pppoed, filters out the PADI, PADO, PADR & PADS exchange. The next step, lcp,  in the process is to negotiate the MTU size, magic number and authentication protocol.

After the lcp negotiation is complete, the user is authenticated via PAP or CHAP. If you have a username or password issue in the modem or BRAS, this is where you will see the negotiation fail.

Once the user is authenticated, we can finally start the IP address negotiation. The ipcp filter will show you the IP address negotiation.

Now that the user is up and authenticated, you will see LCP Echoes between the modem and BRAS. Settings in the modem and BRAS will determine the frequency and size of the echo messages.

Keep in mind that the LCP echo process uses a single ended state machine. What this means is that each end of the link, the modem and the BRAS, keep track of their LCP echoes independently of each other. Whenever either end loses enough consecutive echoes (configurable on the BRAS), it will tear the link down using a PADT. This is a major difference between DHCP leases and PPPoE sessions, either end can tear down the connection. Once a DHCP server issues a lease, that lease is bound until timeout or a DHCP release message is sent.

Using Wireshark

If you don’t have Wireshark in your arsenal, download it now.

Wireshark, formerly ethereal, has become the defacto standard for protocol analysis. It is open source, so anyone can build dissectors for any protocol. If you use proprietary protocols in your products, you can create your own dissector, so Wireshark will decode just like any other standard protocol.

In a future post, I will show how to use Wireshark to look for packet loss in Microsoft Mediaroom flows without needing the encryption key.

An old dog learns a new trick

They say necessity is the mother of invention. I had a large project at work these last few months. It involved gathering obscene amounts of data and then mashing it all together into a coherent human readable output.

The data itself wasn’t hard to obtain, but it was tedious and time consuming. FTP this file, merge with this other file, grep out the stuff I want, move the files some more, process again, etc, etc, etc.

Perl to the rescue!

Since I knew how to navigate all of the systems to obtain the data I needed, it seemed silly to waste time doing it manually (did I mention it was tedious?). I talked to one of the most respected programmers in the company and he suggested we start to automate everything we needed using Perl. Sounds great to me! What’s Perl? I’m not much of a programmer, I don’t think my brain works the same way that a computer does. I once took a unix course back in the ’90’s. I failed the course, because I couldn’t write the required shell script needed to pass the course.

Since then, I’ve always considered myself as “programming impaired”. I’ve done some simple ProComm scripts over the years, but nothing fancy. This was way outside my comfort range, but it had to be done.

I went out and purchased “Perl for Dummies” while my developer was putting together the basic framework for me. Once I got the basic program, I took my book and ran with it.

I now have all of the data collection automated and have even gotten to a point where I can spit out reports and mail them to myself.

This basic framework was then sent to some of our professional developers in order to scale it to tens of thousands of nodes. My basic program was converted to Python (as that is their preferred programming language) and is now being deployed by a Tier 1 telecommunications carrier.

See, an old dog CAN learn new tricks!