Extracting Sky Router Crash Data Amidst Kernel Panics

Sky Hub

I have a Sky broadband connection with fibre into a Sky Router / Sky Hub. I have noticed very short outages of internet service with increasing frequency recently. The outages are short, maybe around 3-5 minutes long but these are annoying enough in the middle of an online meeting or some other synchronous activity. Sometimes two or three of these short outages occur in a relatively short time frame.

There did not seem to be a correlation to temperature, or even usage. In other words, the device doesn’t seem to be crashing because it is overheating under load or ambient temperature.

Extracting the Crash Data

It turns out that some enterprising engineer took the decision to embed crash or reset data in what is perhaps a surprising place, or at least a surprising place for easy user access. If one backups the router configuration settings to a file, the result is an XML file that includes two interesting stanzas towards the end.


Now the X_SKY_COM_DEVICE_DOCTOR also looks quite interesting, but the piece for us right now is the X_SKY_REBOOT_CAUSE. You will note in this case that the RebootInfo data contains the following:

kernel panic marker detected in the flash

Which is interesting if not encouraging. For those not in the know a kernel panic indicates a type of crash in the base operating system of the device. It could be caused by faulty software or in this case firmware in the device, or it could be caused by some hardware problem. In Sky’s case firmware updates are highly automated. It could easily be caused by a firmware bug, but in that case it would likely be experienced by many customers. The smart money if that’s not the case might be on faulty hardware.

Importantly, even if there is some problem in the broadband provision coming from the fibre, the router should not panic or crash – it should just deal with the problem, reconnect when possible and move on. That would be obvious in the device logs.

I called Sky to report this, and the first conversation wasn’t too productive if it wasn’t surprising: the request to turn the device off and on again. Not bad advice, but not successful. I got told to do a total factory reset – which was a time consuming pain, and didn’t fix the problem.

By this point, I’d started to write a very small Python script to automate extracting the crash data and time-stamping it, if the backup file was download by hand. To complete the script I really need to automate the web request part – which I haven’t attempted yet as it looks like I need to handle the session data – not insurmountable, but a bit of work. Here is that short unvarnished script.

import xml.etree.ElementTree as ET
import datetime as dt
import os

# Extract the XML from the settings file and get the root
tree = ET.parse('sky_router_settings.conf')
root = tree.getroot()

# Look for the X_SKY_REBOOT_CAUSE stanza should it exist
for item in root.findall('.//X_SKY_REBOOT_CAUSE'):
    # It does, so let's extract the details
    reboot_time = int(item.find('RebootTime').text)
    reboot_reason_type = item.find('RebootReasonType').text
    reboot_reason_code = item.find('RebootReasonCode').text
    reboot_info = item.find('RebootInfo').text
    # Make an ISO datetime from the Unix epoch timestamp
    reboot_format_time = dt.datetime.utcfromtimestamp(reboot_time).strftime("%Y-%m-%d %H:%M:%S")
    # Let's write the data if it isn't already there (in current working directory)
    if not os.path.exists(reboot_format_time):
        print(f"Found new crash data... {reboot_format_time} {reboot_info}")
            fh = open(reboot_format_time, 'x')
            print(f'Time:{reboot_format_time}', file=fh)
            print(f'Type:{reboot_reason_type}', file=fh)
            print(f'Code:{reboot_reason_code}', file=fh)
            print(f'Info:{reboot_info}', file=fh)
        except Exception as e:
            print(f'oops, something went wrong')

So, to use this, one logs into the sky router (probably browse to or whatever address your router is on from within your network) – go to Maintenance and Backup Settings. Drop the saved file in the same directory as the script, and run it. I was doing this periodically to check for crashes I had not witnessed. It will save any new data into a file with the timestamp as a filename in the same directory. Crude, but it works.

Armed with a number of crash events I called Sky back. What followed was a highly frustrating conversation for all sides, where I was advised that I had to plug the hub into a different electrical socket. I duly did so, and incidentally noticed that the hub records a different reason for the reset.

Power On Reset detected

In other words, the hub notes when it was power cycled. To the surprise of virtually no-one, changing the socket the hub was plugged into did not prevent the crashes. My script detected another one just before 2 am yesterday.

Time:2022-09-07 01:56:12
Info:kernel panic marker detected in the flash

I called Sky again and finally had a constructive conversation – they are sending me a new hub to test. Hopefully this will solve the problem. I doubt it’s a firmware issue or it would have been more widely reported.


I think I will probably try and bite the bullet and use Python to download the backup file too. If I can get that bit working I can rig the whole thing up to cron to check for crash data automatically. New hub or not, keeping a track of these crash events would be useful.

It’s curious that the hub obviously does this hard work of storing crash data, but this doesn’t seem to be transmitted to Sky which would really help them diagnose problems when customers call.

Of Wired, Wireless, Sky+ and 5GHz, and the Linksys ea6300 router

This is partly a ramble, partly a product review, and partly a howto, and mainly an aide memoire. It will naturally therefore be unlikely to succeed perfectly at any of those, but if you have questions, place them in a comment.

We moved into this house just under two years ago, and when we moved in there was no network. Yes, I know – in this day and age.

So we had a Sky+ bundle installed, slightly sadly because I always got broadband from Zen Internet previously, and I have to say I just love them, but the price for the bundle was simply too much below what was possible from Zen.

For a while we had to have an extension cable trailing through the house to where the router had to be installed because the phone socket was in an odd place. Then I finally installed a double socket a bit closer. Then we had a tidier install, but WiFi only throughout. Somewhat to my surprise we got a reliable fast enough signal throughout the height of the (three storey) house. A bit slow, but everything worked.

Bringing gondolin (my main server) back here caused a bit of a headache, partly to due to the loss of a static IP address, and mainly because of a lack of wired network. Two old Ethernet over mains adaptors took care of that to some extent, but it was slow.

So probably about a year ago I finally installed a Cat 6 cable from the router up to the room housing the computer (and a Smart Switch). This was a BigDeal (TM), because now I finally had reliable and fast wired network where all my main IT infrastructure was.

However, we have a couple of smart TVs and a Sky+ box which were all running off the WiFi, and over the years this caused some problems. The TVs were generally OK, but occasionally the streaming quality of video just wasn’t very good and Skype was sometimes flaky (impossible to tell if the problem was our end). The Sky+ OnDemand service was much more of a problem. Hooked to a wireless to wired Access Point it would often drop a film in the middle of streaming and require a lot of intervention (and frustrated viewers) to resume the streaming. We also saw the WiFi space around us grow more crowded and performance at the top of the house became a problem.

So I needed to get a wired network to our living room, ideally with connections for four devices and preferably move the wireless upstairs.

The house is old and the floor boards brittle, so I decided to run the cable around the gable end of the house, alongside some coax cables already there. I hate ladders, but it turns out I hate flaky network connections more, so on Christmas Eve after a lot of hassle I finally squeezed a Cat 5e cable out of an existing but quite full cable hole, and around to the network switch.

I wired plugs on both ends and connected the switch at one end and Sky+ box at the other. Having got a successful wired connection, I then planned to move the Sky+ router to the living room. This would mean that essentially the BT OpenReach box would connect to the switch, and the switch to the router. For reasons that were just not clear to me I couldn’t get the router to connect to the internet in that position. You will see below that there may have been a prosaic reason but in any case the router would have only provided three spare ports and not quite the four I needed, and I found some hints online that the idea  of having a switch in the middle would not work.

So I had a rethink and bought a Linksys ea6300 router, it was on offer at a local supplier, and a check of the manual indicated it could be placed behind an existing router. It also has 5 RJ45 ports, one for the upstream link, and so the four remaining that I needed and offers dual band WiFi.

Installing the router was initially easy, it had good web based configuration behind a custom WiFi network out of the box. I did experience a few headaches on my first attempts at configurations but I find that pretty common with WiFi, especially when you want to do something unusual. I didn’t immediately go for bridge mode, but in the end found that in the IPv4 configuration and that sorted it.

One point to note, in bridge mode it wants to default to a dynamic IP but then can’t be configured (obviously) unless you know that IP. Fortunately I had configured by DHCPD to allocated it a specific IP, or I could easily have “lost” it. But in any case, my bench tests showed that in the study, it was connected to the Internet and working perfectly.

So I moved the box back into the living room, plugged in the network cable and awaited my triumphant success. In vain. Nothing was working. I plugged the cable back into the Sky+ box, it got a connection straight away. I tried flexing the cable to provoke a fault, nothing. I checked the cable (again) with a cable tester, all wire pairs reported as correct.

I went around in this circle for quite a while, messing around with settings on my Smart Switch and ports as you do when a red herring is about. I didn’t want to accept anything could be wrong with my new cable for two reasons; one was that it was working with the Sky+ box, but the other was I didn’t fancy another afternoon up ladders racing against the sunset.

I had visually inspected both plugs of course, but decided there was nothing for it but to try new plugs. I cut off the living room end and fitted a new plug. And it all worked… it seems my cable crimping skills and cable tester are both in some doubt.

I was able to plug four devices that could be networked into the back of the router, and got two new WiFi networks into the bargain. At the moment one has the same SSID and password as my old WiFi (and both are operating currently), a second 5GHz network is so labelled at least for now to help with testing.

I am getting excellent speeds from the WiFi now over the upper areas of house. I think occasionally there seems to be a connection hiccup and I may have to rename or disable the downstairs main router WiFi but I am leaving them both for now.

I can much more easily stream video at the top of the house, and the image quality is consistently much better.

The Linksys router is a nice, inexpensive device for this purpose, although that is obviously only a small amount of its functionality. It has no external antennae but as it is adding to coverage at the moment that is not a problem, it’s a visually neat box and the inbuilt web interface is slick and well designed. One very good feature is that it does not come with the usual “admin” or “password” preset but a randomly generated password on install (which you can edit). More devices should do this. The manual is not particularly clear about all questions one might have, but overall this is a good solution for my problem for now, at least at the low price I was able to obtain it.