blockdiag components-bagpipe {
      span_width = 64
      node_height = 100

      shadow_style=none
      default_shape = roundedbox

      group neutron {
         label="Neutron"
         color=red

         api[label="API\n(e.g Core)",color="lightyellow"]
         ml2[label="ML2\nplugin",color="lightyellow"]
         db[shape=flowchart.database,label="DB",color="lightyellow"]
         driver[label="bagpipe\nmech\ndriver",color="lightyellow"]

         api -> ml2
         ml2 -> driver
         ml2 -> db[folded]
         driver -> db[folded]
      }

      group computeA {
         label="compute or\nnetwork node"
         color=orange

         agent_a[label="Neutron linuxbridge\nagent\n+ bagpipe extension",color=grey,textcolor=darkorange]
         vswitch_a[label="linux bridge",color=lightgrey]
         bgpspeaker_a[label="bagpipe-bgp",color="darkorange"]

         agent_a -> bgpspeaker_a[label="REST"]
         agent_a -> vswitch_a[folded]
         bgpspeaker_a -> vswitch_a[folded]
      }

      group computeB {
         label="compute or\nnetwork node"
         color=orange

         agent_b[label="Neutron linuxbridge\nagent\n+ bagpipe extension",color=grey,textcolor=darkorange]
         vswitch_b[label="vswitch\n(OVS or linux)",color=lightgrey]
         bgpspeaker_b[label="bagpipe-bgp",color="darkorange"]

         agent_b -> bgpspeaker_b[label="REST"]
         agent_b -> vswitch_b[folded]
         bgpspeaker_b -> vswitch_b[folded]
      }

      group routers {
         color=lightgrey
         shape=line
         style=none

         bgppeers[label="BGP Route Reflector",stacked,color=green];
      }

      bgpspeaker_a, bgpspeaker_b <-> bgppeers [color=green,
                                               label="BGP",
                                               textcolor=green]

      /*vswitch_b <-> vswitch_a [label="VXLAN", folded]
      vswitch_a, vswitch_b <-> mplsrouters[label="MPLS\n(over-x)"]*/

      driver <- agent_a, agent_b [label="RPCs"];

      /*vswitch_a <-> mplsrouters [label="MPLS\n(over-x)"]
      vswitch_b <-> mplsrouters [label="MPLS\n(over-x)"]*/

}