  Multicasting is a fundamental networking primitive utilized by numerous
applications. This also holds true for cognitive radio networks (CRNs) which
have been proposed as a solution to the problems that emanate from the static
non-adaptive features of classical wireless networks. A prime application of
CRNs is dynamic spectrum access (DSA), which improves the efficiency of
spectrum allocation by allowing a secondary network, comprising of secondary
users (SUs), to share spectrum licensed to a primary licensed networks
comprising of primary users (PUs). Multicasting in CRNs is a challenging
problem due to the dynamic nature of spectrum opportunities available to the
SUs. Various approaches, including those based in optimization theory, network
coding, algorithms, have been proposed for performing efficient multicast in
CRNs. In this paper, we provide a self-contained tutorial on algorithms and
techniques useful for solving the multicast problem, and then provide a
comprehensive survey of protocols that have been proposed for multicasting in
CRNs. We conclude this paper by identifying open research questions and future
research directions.
