Constructing edge-disjoint spanning trees in dragonfly networks