Today is the dreaded day in the US (and other places) when we must sacrifice an hour of our precious time to the sun deity so that he might rise again in the morning. While this is great for being outdoors and enjoying the sunshine all the way into the late evening hours, it does wreak havoc on our networking equipment that relies on precise timing to let us know when a core dump happened or when that last PRI call came in when running debug isdn q931. However, getting the right time running on our devices can be a challenge. In this post, I will cover configuring Daylight Savings Time on Cisco, HP, and Juniper network equipment for the most pervasive OS deployments. Note that some configurations are more complicated than others. Also, I will be using Central Time (CST/CDT) for my examples, which is GMT -6 (-5 in DST). Adjust as necessary for your neck of the woods. I’m also going to assume that you’ve configured NTP/SNTP on your devices. If not, read my blog post about it and go do that first. Don’t worry, I’ll still be here when you get back. I have free time.
I’ve covered the basics of setting DST config on Cisco IOS before, but I’ll put it here for the sake of completeness. In IOS (and IOS XR), you must first set the time zone for your device:
R1(config)# clock timezone <name> <GMT offset> R1(config)# clock timezone CST -6
Easy, right? Now for the fun part. Cisco has always required manual configuration of DST on their IOS devices. This is likely due to them being shipped all around the world and various countries observing DST (or not) and even different regions observing it differently. At any rate, you must the clock summer-time command to configure your IOS clock to jump when needed. Note that in the US, DST begins at 2:00 a.m. local time on the second Sunday in March and ends a 2:00 a.m. local time on the first Sunday in November. That will help you decode this code string:
R1(config)# clock summer-time <name> recurring <week number start> <day> <month> <time to start> <week number end> <day> <month> <time to end> R1(config)# clock summer-time CDT recurring 2 Sun Mar 2:00 1 Sun Nov 2:00
Now your clock will jump when necessary on the correct day. Note that this was a really handy configuration requirement to have in 2007, when the US government decided to change DST from the previous requirement of the first Sunday in April at the start and the last Sunday in October to end. With Cisco, manual reconfiguration was required, but no OS updates were needed.
HP (Procurve/E-Series and H3C/A-Series)
As near as I can tell, all HP Networking devices derive their DST settings from the OS. That’s great…unless you’re working on an old device or one that hasn’t been updated since the last presidential administration. It turns out that many old HP Procurve network devices still have the pre-2007 US DST rules hard-coded in the OS. In order to fix them, you’re going to need to plug in a config change:
ProCurve(config)# time daylight-time-rule user-defined begin-date 3/8 end-date 11/1
I know what you’re thinking. Isn’t that going to be a pain to change every year if the dates are hard-coded? Turns out the HP guys were ahead of us on that one too. The system is smart enough to know that DST always happens on a Sunday. By configuring the rule to occur on March 8th (the earliest possible second Sunday in March) and November 1st (the earliest possible first Sunday in November), the system will wait until the Sunday that matches or follows that date to enact the DST for the device. Hooray for logic! Note that if you upgrade the OS of your device to a release that supports the correct post-2007 DST configuration, you won’t need to remove the above configuration. It will work correctly.
Juniper configures DST based on the information found in the IANA Timezone Database, often just called tz. First, you want to get your device configured for NTP. I’m going to refer you to Rich Lowton’s excellent blog post about that. After you’ve configured your timezone in Junos, the system will automatically correct your local clock to reflect DST when appropriate. Very handy, and it makes sense when you consider that Junos is based heavily on BSD for basic OS operation. One thing that did give me pause about this has nothing to do with Junos itself, but with the fact that there have been issues with the tz database, even as late as last October. Thankfully, that little petty lawsuit was sidestepped thanks to the IANA taking control of the tz database. Should you find yourself in need of making major changes to the Junos tz database without the need to do a complete system update, check out these handy instructions for setting a custom timezone over at Juniper’s website. Just don’t be afraid to get your hands dirty with some BSD commands.
Daylight Savings Time is one of my least favorite things. I can’t see the advantage of having that extra hour of daylight to push the sunlight well past bedtime for my kids. Likewise, I think waking up to sunrise is overrated. As a networking professional, DST changes give me heartburn even when everything runs correctly. And I’m not even going to bring up the issues with phone systems like CallManager 4.x and the “never going to be patched” DST issues with Windows 2000. Or the Java issues with 79xx phones that still creep up to this day and make DST and confusing couple of weeks for those that won’t upgrade technology. Or even the bugs in the iPhone with DST that cause clocks to spring the wrong way or alarms to fail to fire at the proper time. In the end though, network enginee…rock stars are required to pull out our magical bags and make everything “just work”. Thanks to some foresight by major networking vendors, it’s fairly easy to figure out DST changes and have them applied automagically. It’s also easy to change things when someone decides they want their kids to have an extra hour of daylight to go trick-or-treating at Halloween (I really wish I was kidding). If you make sure you’ve taken care of everything ahead of time, you won’t have to worry about losing more than just one hour of sleep on the second Sunday in March.