[prev] [thread] [next] [lurker] [Date index for 2006/03/27]
Right, so I've dutifully been quagmired in http://we.hates-software.com/ for the last few days (Was introduced sometime last year, and forced myself then to ignore it till I had the time to read.. :P).. And I feel empowered enough to share with you lovely bitter folk, a Hate of mine that reared its pustule infected head on Friday. So, I live in a part of the world that has a severely Intellectually Handicapped Broadband service. No points for guessing where. Anyway, I've got this 2mbit/128kbit connection at home, that's basically grown from a 24/7 56k modem link some years ago. Some years ago, the 486 firewall with ISA 10mbit NIC's was un-hateful. Now, on the otherhand, I get about 85-90kbytes/sec through this box. Ok, so perhaps I should replace it with something a little more grunty, that can get me the full potential of that 2mbit. Enter one disused "development" Linksys WRT54G. Update the firmware to the latest OpenWRT (RC4, as of Friday, RC5 was released today... *seethe*). "Development", because I'd hacked it to add an SD card slot.. no matter, the firewall could probably do with a little storage for logs and whatnot. Anyway, I have this slightly tempermental, but definitely better than the alternatives, 3com HomeConnect ADSL Modem. 3com, in their infinite wisdom, decided to change the Ethernet frame types for its implementation of PPPoE. This is a whole other Hate that I just won't go into now. (PPPoE on the LAN side, it's an Access Concentrator.. it basically converts the PPPoA ADSL we have here to PPPoE on my side.. just a bridge, doesn't do any login or anything). Oh... and the modified frame type values? 0x3c12 and 0x3c13. Now, I can't imagine why they chose those.... On with the story, less rambling... Ok, so the linux kernel mode pppoe driver, and the pppd plugin to use kernel mode pppoe, don't support these different frame types. Hackery time. Fetch the OpenWRT dev environment from Subversion. Type 'make'. Wait. Wait some more. and some more... ok, done. (download sources for kernel, gcc, etc, etc, build crosscompile environment). Find locations to change frame types, to see if it'll work. Kernel tree - include/linux/if_ether.h. easy. pppd. Hrm.. ok, plugins.. ahh.. pppd/plugins/rp-pppoe/pppoe.h: /* Ethernet frame types according to RFC 2516 */ #define ETH_PPPOE_DISCOVERY 0x8863 #define ETH_PPPOE_SESSION 0x8864 /* But some brain-dead peers disobey the RFC, so frame types are variables */ extern UINT16_t Eth_PPPOE_Discovery; extern UINT16_t Eth_PPPOE_Session; Oh, brilliant! there must be some config options to do this.. that makes it easy! Hunt around... Ok, those variables are only given values in one place, in if.c: /* Initialize frame types to RFC 2516 values. Some broken peers apparently use different frame types... sigh... */ UINT16_t Eth_PPPOE_Discovery = ETH_PPPOE_DISCOVERY; UINT16_t Eth_PPPOE_Session = ETH_PPPOE_SESSION; HATE. HATE, and some more HATE. Ok, I can see the intention is there to perhaps actually do something useful with those values in variables... but honestly, whinging about some "broken" and "brain-dead" peers not using the right frame type values, then half-heartedly having a go at supporting them? Would have been better to just define the bloody values, and not say anything.. *Argh*. Now, this probably isn't the best hate I could muster.. but supposedly I need to be doing this thing called work.. Thankfully I finished battle with the SCO box last week... there's some Hate there, but it's worn off a little now. Mike. -- Mike Beattie <mike@xxxxxxxx.xxx>
Generated at 16:00 on 04 Apr 2006 by mariachi 0.52