2009-10-05

Customer Service Fail

One of the bad ideas cur­rently infect­ing com­pa­nies in the tech­nol­ogy field is the LivePerson “chat with a sup­port per­son now” thing. This is a bad idea for mul­ti­ple reasons:

  1. It’s a gigan­tic float­ing piece of garbage dis­tract­ing me from what­ever it is I’m try­ing to learn about your com­pany or it’s products.
  2. The rep­re­sen­ta­tives on the other side are idiots who wouldn’t know what cus­tomer ser­vice is were it [insert your preferred-gendered joke here].

Case in point: Limelight Networks. The web­site lists about 15 “Services” they offer, and none of them are imme­di­ately obvi­ous and I don’t want to spend the next hour pars­ing their mar­ketease try­ing to find the spe­cific niche prod­uct I’m look­ing for. So I (like a fool) click the stu­pid chat thing obscur­ing their page. This started at 8:30am and went on until 9:30am.

Jon: Yes what com­pany or site are you from so I can bet­ter help you?
You: [redacted]
Jon: Thank you for wait­ing. I’ll be with you in just a moment.
Jon: I’m sorry for the delay. I’ll be right with you.
Jon: I’ll be right with you.
You: Why don’t you have a sales­per­son con­tact me and just ask me if our web­site is, in fact, a blank page?
Jon: I’m sorry for the delay. I’ll be right with you.
Jon: Thank you for wait­ing. I’ll be with you in just a moment.
Jon: I’ll be right with you.
Jon: I’ll be right with you.
Jon: Thank you for wait­ing. I’ll be with you in just a moment.
You: So what’s the point of this chat, exactly? For me to wait on iHold for an hour while canned mes­sages about your immi­nent reply scroll past?
You: Until I get bored and find another vendor?

After another cou­ple min­utes I just closed the win­dow, and now I’m at Akamai’s site, look­ing at their “solu­tions finder” — which is what I was look­ing for on Limelight’s web­site to begin with.

Comment on this...


2009-07-17

Distributing Static Routes with DHCP

I’m set­ting up an iso­lated net­work for peo­ple to test inter­nal appli­ca­tions on, since the devel­op­ers all have Sun work­sta­tions with a dual-port Gigabit NIC on the moth­er­board, and we’ve got a bunch of older net­work equip­ment that we haven’t got­ten around to eBay­ing yet. What I’m doing is link­ing the sec­ond NICs together with some vir­tual machines and the older net­work equip­ment to cre­ate a sep­a­rate devel­op­ment network.

The devel­op­ment net­work is a full Layer-3 net­work run­ning an IGP between mul­ti­ple nodes with attached client boxes. This allows me to play around with a decent lab net­work, and pro­vides devel­op­ers with a way to dis­cover that Linux sets the TTL of mul­ti­cast pack­ets to “1” well before they are called to explain why their appli­ca­tion didn’t work even after loads of test­ing, spend 8 hours play­ing head-desk, and finally start ques­tion­ing me about fire­walls on our inter­nal net­work, forc­ing me to claw it out of them that they are dri­ving mul­ti­cast with­out a license and explain how to use tcpdump.

Not that I’ve had to do that a dozen times now, or any­thing…
Read the rest of this entry »

Be the second to comment on this...


2008-11-30

New Books

Latest on the “done” pile are Rule The Freakin’ Markets and IS-IS Network Design Solutions. Summaries/reviews of both are up.

Be the first to comment on this...


2008-05-04

Living with Telcos

Your net­work engi­neer orders four T1 lines from loca­tions in City A to a dat­a­cen­ter in City Z via a large telco. He leaves the week before these are to be dropped, and of course, does not doc­u­ment what he was doing or even keep copies of the contracts.

Either way, the lines are in the process of get­ting installed, and no one you have the con­tact with at the large telco can tell you the infor­ma­tion you need. The order man­ager “has no cross con­nect info”, and the sales sup­port engi­neer tells you to ask the order man­ager. Naturally, all the con­tracts and doc­u­ments restored from the e-mail back­ups sim­ply describe the datacenter’s address as the A-side loca­tion — with­out any of the specifics you’d need to order a cross con­nect from the datacenter.

Meanwhile, the installer is turned away from the Z-side loca­tion because they didn’t call ahead to sched­ule an appoint­ment. Call the Z-side build­ing man­ager and for­ward the infor­ma­tion required to get past secu­rity to large-telco. Large-telco tells you that mak­ing an appoint­ment in advance and pro­vid­ing the infor­ma­tion that secu­rity requires to get in is impos­si­ble. Somehow this location’s 6000 other pri­vate lines were installed through magic.

Moral of the story: However irri­tat­ing it is to trou­bleshoot some­thing through a reseller, it is far worse to get some­thing deliv­ered from a large telco.

Comment on this...


2007-10-01

Xen and The Art of Free Speech

Aside from the laugh­able idea of “mil­i­tantly” sup­port­ing any­thing with a blog post, Miguel sim­ply noted that these peo­ple exist, have writ­ten a book, and will be doing the speaking-tour-thing near him. Does he agree with the con­tents? (shakes eight-ball) Signs point to Yes.

Is he free to do so? Also yes.

Are you free to ignore him? Still yes.

Does His Chomskiness actu­ally take the chal­lenge and pro­vide a bet­ter rebut­tal to the under­ly­ing book than politely demand­ing Miguel STFU? Yep.

Oh, and here’s a patch that will let you do some­thing cool with XEN 3.0.3:

--- network-bridge      2007-02-08 09:21:12.000000000 -0600
+++ network-vlans       2007-09-14 09:55:20.000000000 -0500
@@ -26,6 +26,7 @@
 # bridge     The bridge to use (default xenbr${vifnum}).
 # netdev     The interface to add to the bridge (default eth${vifnum}).
 # antispoof  Whether to use iptables to prevent spoofing (default no).
+# vlans      VLANs to add on top of the bridge
 #
 # Internal Vars:
 # pdev="p${netdev}"
@@ -64,18 +65,27 @@
 bridge=${bridge:-xenbr${vifnum}}
 netdev=${netdev:-eth${vifnum}}
 antispoof=${antispoof:-no}
+vlans=$(echo $vlans | sed -e 's/,/ /g')

 pdev="p${netdev}"
 vdev="veth${vifnum}"
 vif0="vif0.${vifnum}"

 get_ip_info() {
-    addr_pfx=`ip addr show dev $1 | egrep '^ *inet' | sed -e 's/ *inet //' -e 's/ .*//'`
+    addr_pfx=`ip addr show dev $1 | sed -n 's/^ *inet \(.*\) [^ ]*$/\1/p'`
     gateway=`ip route show dev $1 | fgrep default | sed 's/default via //'`
 }
+
+is_bonding() {
+    [ -f "/sys/class/net/$1/bonding/slaves" ]
+}
+
+is_ifup() {
+    ip link show dev $1 | awk '{ exit $3 !~ /[< ,]UP[,>]/ }'
+}

 do_ifup() {
-    if ! ifup $1 ; then
+    if ! ifup $1 || ! is_ifup $1 ; then
         if [ ${addr_pfx} ] ; then
             # use the info from get_ip_info()
             ip addr flush $1
@@ -206,8 +216,8 @@
        mac=`ip link show ${netdev} | grep 'link\/ether' | sed -e 's/.*ether \(..:..:..:..:..:..\).*/\1/'`
        preiftransfer ${netdev}
        transfer_addrs ${netdev} ${vdev}
-       if ! ifdown ${netdev}; then
-           # If ifdown fails, remember the IP details.
+       if is_bonding ${netdev} || ! ifdown ${netdev}; then
+           # Remember the IP details if necessary.
            get_ip_info ${netdev}
            ip link set ${netdev} down
            ip addr flush ${netdev}
@@ -223,6 +233,18 @@
        add_to_bridge  ${bridge} ${vif0}
        add_to_bridge2 ${bridge} ${pdev}
        do_ifup ${netdev}
+
+       if [ -n "$vlans" ]; then
+               vconfig set_name_type VLAN_PLUS_VID_NO_PAD
+
+               for vlan in $vlans; do
+                       create_bridge xenbr${vlan}
+
+                       vconfig add ${bridge} ${vlan}
+                       setup_bridge_port vlan${vlan}
+                       add_to_bridge xenbr${vlan} vlan${vlan}
+               done
+       fi
     else
        # old style without ${vdev}
        transfer_addrs  ${netdev} ${bridge}
@@ -262,6 +284,20 @@
        ip link set ${netdev} name ${vdev}
        ip link set ${pdev} name ${netdev}
        do_ifup ${netdev}
+
+       if [ -n "$vlans" ]; then
+               for vlan in $vlans; do
+                       if [ -n `ip link show vlan${vlan} | grep '${bridge}\:'` ]; then
+                               ip link delif ${bridge} xenbr${vlan}
+                               ip link set ${bridge} down
+
+                               ip link set vlan${vlan} down
+                               vconfig rem ${bridge} ${vlan}
+                       fi
+               done
+
+               vconfig set_name_type DEV_PLUS_VID_NO_PAD
+       fi
     else
        transfer_routes ${bridge} ${netdev}
        ip link set ${bridge} down

It may be buggy, since I haven’t tested it in pro­duc­tion. What it does is this: allows you to run an 802.1Q trunk into your XEN server, then put your vir­tual machines on any VLAN you want with a cou­ple con­fig­u­ra­tion stanzas.

So, your xend-config.sxp will have:

(network-script 'network-vlans netdev=eth0 vlans=8,9,10,11,13,121,14,15')

Which trans­lates to “cre­ate bridges for VLAN 8, 9, 11, 13, 121, 14, and 15 with a xenbr pre­fix”. Then you set your DomU vif stanza to be “bridge=xenbr13” and bam! your DomU exists on the VLAN13. The pri­mary lim­i­ta­tion of this is that it keeps your Dom0 on the untagged/native VLAN, which isn’t best practice.

The stack of mod­ules a packet tra­verses to get to a DomU will look like this (with rel­e­vant modules):

[network] -->
dom0: peth0 (dev) -->
dom0: xenbr0 (bridge) -->
dom0: vlan13 (dot1q attached to xenbr0) -->
dom0: xenbr13 (bridge) -->
dom0: vifX.0 (netloop) -->
domU: xen0 (xennet)

Comment on this...