#### Table 1

Lightpath-Based Minimum-Cost Groupcast RWA Algorithm (MC_GCRWA)

| |
---|

**Step 1**
| Given a network
$G=(V,E)$
and a group of nodes
$\{{v}_{1},{v}_{2},\dots ,{v}_{k}\}$
, choose
${v}_{1}$
and compute the MCP from
${v}_{1}$
to all other nodes
$\{{v}_{2},\dots {v}_{k}\}$
. |

**Step 2**
| Store the routes found in **Step 1** in
$\{{R}_{2}^{1},{R}_{3}^{1},\dots {R}_{k}^{1}\}$
. |

**Step 3**
| Repeat **Steps 1** and **2** for all members of the group
$\{{v}_{1},{v}_{2},\dots ,{v}_{k}\}$
and construct the light-forest matrix:
$F=\left\{\begin{array}{cccc}{R}_{2}^{1}& {R}_{3}^{1}& \dots & {R}_{k}^{1}\\ {R}_{1}^{2}& {R}_{3}^{2}& \dots & {R}_{k}^{2}\\ \vdots & \vdots & \vdots & \vdots \\ {R}_{1}^{k}& {R}_{2}^{k}& \dots & {R}_{k-1}^{k}\end{array}\right\}\mathrm{.}$
The light-forest *F* consists of *k* light-trees, where light-tree
${T}^{j}$
is represented by the row-vector
${T}^{j}={[{R}_{1}^{j}{R}_{2}^{j}\dots {R}_{k}^{j}]}_{(k-1)\times 1}$
. Note that row-vector
${T}^{j}$
has
$(k-1)$
routes, as no loopback route is allowed. |

**Step 4**
| Return light-forest *F* to wavelength assignment function. |

**Step 5**
| Choose the route
$F(1,1)$
represented by the link set array
${L}_{1}=\{{l}_{1},{l}_{2},\dots {l}_{m}\}$
$(m=\mid {L}_{1}\mid )$
, and find a free wavelength
${\mathrm{\lambda}}_{j}$
,
$(1\u2a7dj\u2a7dW)$
, where *W* represents the total number of wavelengths per fiber in the network. |

**Step 6**
| Mark the wavelength
${\mathrm{\lambda}}_{j}$
chosen in **Step 5** as unavailable in all links from the link set
${L}_{i}$
. |

**Step 7**
| Repeat **Steps 5** and **6** for all elements of *F* or lightpaths represented by
${L}_{i}$
where
$1\u2a7di\u2a7d{(k-1)}^{2}$
. |

#### Table 2

Lightpath-Based Minimum-Cost Multicast RWA Algorithm (MC_MCRWA)

| |
---|

**Step 1**
| Given a network
$G=(V,E)$
and a group of nodes
$\{{v}_{1},{v}_{2},\dots ,{v}_{k}\}$
, choose
${v}_{1}$
and compute the MCP from
${v}_{1}$
to all other nodes
$\{{v}_{2},\dots {v}_{k}\}$
. |

**Step 2**
| Store the routes found in **Step 1** in
$\{{R}_{2},{R}_{3},\dots {R}_{k}\}$
. |

**Step 3**
| Choose the route
$R(1)$
represented by the link set array
${L}_{1}=\{{l}_{1},{l}_{2},\dots {l}_{m}\}$
$(m=\mid {L}_{1}\mid )$
, and find a free wavelength
${\mathrm{\lambda}}_{j}$
$(1\u2a7dj\u2a7dW)$
, where *W* represents the total number of wavelengths per fiber in the network. |

**Step 4**
| Mark the
${\mathrm{\lambda}}_{j}$
chosen in **Step 3** as unavailable in all links from the link set
${L}_{i}$
. |

**Step 5**
| Repeat **Steps 3** and **4** for all elements of *R* or lightpaths represented by
${L}_{i}$
where
$1\u2a7di\u2a7dk-1$
. |

#### Table 3

Lightpath-Based MHP GC-RWA Algorithm (MHP_GCRWA)

| |
---|

**Step 1**
| Given a network
$G=(V,E)$
and a group of nodes
$\{{v}_{1},{v}_{2},\dots ,{v}_{k}\}$
, choose
${v}_{1}$
and compute shortest path from
${v}_{1}$
to all other nodes
$\{{v}_{2},\dots {v}_{k}\}$
based on hop counts. |

**Step 2**
| Store the routes found in **Step 1** in
$\{{R}_{2}^{1},{R}_{3}^{1},\dots {R}_{k}^{1}\}$
. |

**Step 3**
| Repeat **Steps 1** and **2** for all members of the group
$\{{v}_{1},{v}_{2},\dots ,{v}_{k}\}$
and construct the light-forest matrix:
$F=\left\{\begin{array}{cccc}{R}_{2}^{1}& {R}_{3}^{1}& \dots & {R}_{k}^{1}\\ {R}_{1}^{2}& {R}_{3}^{2}& \dots & {R}_{k}^{2}\\ \vdots & \vdots & \vdots & \vdots \\ {R}_{1}^{k}& {R}_{2}^{k}& \dots & {R}_{k-1}^{k}\end{array}\right\}\mathrm{.}$
The light-forest *F* consists of *k* light-trees, where light-tree
${T}^{j}$
is represented by the row-vector
${T}^{j}={[{R}_{1}^{j}{R}_{2}^{j}\dots {R}_{k}^{j}]}_{(k-1)\times 1}$
. Note that row-vector
${T}^{j}$
has
$(k-1)$
routes, as no loopback route is allowed. |

**Step 4**
| Return light-forest *F* to wavelength assignment function. |

**Step 5**
| Choose the route
$F(1,1)$
represented by the link set array
${L}_{1}=\{{l}_{1},{l}_{2},\dots {l}_{m}\}$
$(m=\mid {L}_{1}\mid )$
, and find a free wavelength
${\mathrm{\lambda}}_{j}$
$(1\u2a7dj\u2a7dW)$
, where *W* represents the total number of wavelengths per fiber in the network. |

**Step 6**
| Mark the wavelength
${\mathrm{\lambda}}_{j}$
chosen in **Step 5** as unavailable in all links from the link set
${L}_{i}$
. |

**Step 7**
| Repeat **Steps 5** and **6** for all elements of *F* or lightpaths represented by
${L}_{i}$
where
$1\u2a7di\u2a7d{(k-1)}^{2}$
. |

#### Table 4

Lightpath-Based Groupcast With No Wavelength Conversion: Optical Groupcast Heuristic for Monocolor Light-Trees

| |
---|

**Step 1**
| Given a network
$G=(V,E)$
and a list of groupcast sessions *S*, choose the first session
${S}_{1}=\{{v}_{1},{v}_{2},\dots ,{v}_{k}\}$
. |

**Step 2**
| Begin with
${v}_{1}$
and compute shortest lightpaths from
${v}_{1}$
to all nodes
$({v}_{2}\dots {v}_{k})$
based on hop counts. Construct light-tree
${T}_{1}$
with source node
${v}_{1}$
. |

**Step 3**
| Find a wavelength
$({\mathrm{\lambda}}_{j},1\u2a7dj\u2a7dW)$
from *W* wavelengths such that all lightpaths from **Step 2** can be served. Mark wavelength
${\mathrm{\lambda}}_{j}$
as **used** along the lightpaths for light-tree
${T}_{1}$
. |

**Step 4**
| Repeat **Steps 2** and **3** for all nodes in Session
${S}_{1}$
until all nodes are served (a total of *k* light-trees.) |

**Step 5**
| Repeat **Steps 1–4** until all sessions in *S* are served (a total of
$\mid S\mid $
light-forests.) |

#### Table 5

Lightpath-Based Groupcast With No Wavelength Conversion: Optical Groupcast Heuristic for Multicolor Light-Trees

| |
---|

**Step 1**
| Given a set of groupcast sessions
${S}_{g}$
, where *g* is the number of sessions, construct a list
$(\Lambda )$
by decomposing each session into multiple point-to-point source–destination pairs. |

**Step 2**
| Choose sequentially a wavelength
$({\mathrm{\lambda}}_{j},1\u2a7dj\u2a7dW)$
and construct graph
$G=(V,E)$
to find the lightpath to serve the first session from list Λ. |

**Step 3**
| Mark the wavelength
${\mathrm{\lambda}}_{j}$
as **used** along the lightpath. If the lightpath is not found, choose the next wavelength in **Step**
**2** and repeat **Step 2** until the session is served. |

**Step 4**
| Repeat **Step 3** for all sessions until list Λ is completed. |

#### Table 6

Lightpath-Based Groupcast With Wavelength Conversion for Rainbow Light-Trees: Optical Groupcast Heuristic for Rainbow Light-Forests

| |
---|

**Step 1**
| Given a network
$G=(V,E)$
and a list of groupcast sessions
${S}_{g}$
, where *g* is the number of sessions, construct a list Λ by decomposing each session into multiple point-to-point source–destination sessions. |

**Step 2**
| Compute shortest lightpath for each session in Λ. |

**Step 3**
| Make a link set
${L}_{m}=\{{l}_{1},{l}_{2},\dots ,{l}_{x}\}$
required in order to construct the lightpath to serve session
${\Lambda}_{i}$
. Find a wavelength
$({\mathrm{\lambda}}_{j},1\u2a7dj\u2a7dW)$
from *W* wavelengths for each link in
${L}_{m}$
. |

**Step 4**
| Mark each wavelength assigned
${L}_{m}=\{{l}_{1}^{{\mathrm{\lambda}}_{1}},\dots ,{l}_{x}^{{\mathrm{\lambda}}_{j}}\}$
for the link set
${L}_{m}$
. |

**Step 5**
| Repeat **Steps 2–4** until all sessions in Λ are served. |

#### Table 7

Layered-Graph-Based Groupcasting for Wavelength-Continuous OXC-Based Networks: Wavelength-Optimized Optical Groupcast Heuristic

| |
---|

**Step 1**
| Given a network
$G=(V,E)$
and a list of groupcast sessions
${S}_{g}$
, where *g* is the number of sessions, construct a list Λ by decomposing each session into multiple point-to-point source–destination sessions. |

**Step 2**
| Compute shortest lightpath for each session in Λ and sort it based on cost or hop counts. It must be sorted in ascending or descending order. For random heuristic the sorting is done in a random fashion. |

**Step 3**
| Choose sequentially a wavelength
$({\mathrm{\lambda}}_{j},1\u2a7dj\u2a7dW)$
from *W* wavelengths and construct a new graph
${G}_{j}=(V,E)$
. Choose a session from **Step 2** and compute the lightpath to serve it. Mark the wavelength
${\mathrm{\lambda}}_{j}$
as **used** along the lightpath. |

**Step 4**
| Repeat **Step 3** for all sessions until Λ is completed. |

#### Table 8

Routing Algorithms to Build Groupcast Light-Forest

Step | Lightpath-Based | Light-Tree-Based |
---|

1 | Calculate all pairs of minimum cost paths (MCH) and store the paths in a table. | Calculate all pairs of minimum cost paths (MCH) and store the paths in a table. |

2 | For a groupcast call, find the shortest paths from one group participant to all other group members (set of lightpaths). Repeat the process until all group members are served (make light-forest). | For a groupcast call, find and combine the shortest paths from one group participant to all other group members (make light-tree). Repeat the process until all the group members are served (make light-forest). |

3 | Find wavelengths for each lightpath until the complete light-forest is illuminated. | Find wavelengths for each light-tree until the complete light-forest is illuminated. |

#### Table 9

Light-Tree-Based Groupcasts With No Wavelength Conversion: Cost Optimization Heuristic for Groupcast in MC-OXC Networks

| |
---|

**Step 1**
| Given a groupcast session list with *g* sessions, select the first groupcast session. |

**Step 2**
| For groupcast size *k*, generate *k* multicast trees using the Steiner tree MCH. |

**Step 3**
| Index each tree found in **Step 2** in terms of source (*s*), destinations (*d*), cost (*c*), and wavelength (*w*) in the session list
${S}_{i}=\{{s}_{i},{d}_{i}^{1},{d}_{i}^{2},\dots {d}_{i}^{k},{c}_{i},{w}_{i}\}$
. |

**Step 4**
| Repeat **Steps 2** and **3** until all of the *g* groupcast sessions are served. Sort the sessions in *S* based on destination group size or session cost (or randomly). |

**Step 5**
| Select the first session from list *S*. |

**Step 6**
| Choose the first wavelength
$({W}_{i})$
from the *W*-wavelength list and construct a graph
${G}^{\prime}$
based on the wavelength availability per link. If the wavelength is unavailable, the link is removed from the original physical graph *G*. |

**Step 7**
| Route the
${S}_{i}$
session on graph
${G}^{\prime}$
from **Step 6** by using the Steiner tree MCH. If the routing is successful, assign wavelengths to the links selected during multicast tree construction and update the cost
${c}_{i}$
in the
${S}_{i}$
list. If the multicast routing fails, increment the wavelength
$({W}_{i+1})$
and go to **Step 6**. |

**Step 8**
| Repeat **Steps 6** and **7** until all sessions from list
${S}_{i}$
are served. |

**Step 9**
| Compute the total cost of the sessions using
${S}_{\text{cost}}={\sum}_{i=1}^{i=\mid S\mid}{c}_{i}$
. |