diff options
author | Russ Meyerriecks <rmeyerriecks@digium.com> | 2010-11-19 17:34:31 +0000 |
---|---|---|
committer | Russ Meyerriecks <rmeyerriecks@digium.com> | 2010-11-19 17:34:31 +0000 |
commit | ab656f2366c3ec4e34963f6774216431cf64dbbb (patch) | |
tree | a2a978b7f795babe6ce4186c19ab601dc2127842 | |
parent | 09dc0bd0a6175596458d8d5f07e8c5f0268e61a6 (diff) |
dahdi: Moved the channel mirroring interface behind a build flag
It can now be enabled by un-commenting the CONFIG_DAHDI_MIRROR define in
include/dahdi/dahdi_config.h
Signed-off-by: Russ Meyerriecks <rmeyerriecks@digium.com>
Acked-by: Shaun Ruffell <sruffell@digium.com>
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9492 a0bf4364-ded3-4de4-8d8a-66a801d63aff
-rw-r--r-- | drivers/dahdi/dahdi-base.c | 14 | ||||
-rw-r--r-- | include/dahdi/dahdi_config.h | 5 | ||||
-rw-r--r-- | include/dahdi/kernel.h | 2 | ||||
-rw-r--r-- | include/dahdi/user.h | 3 |
4 files changed, 24 insertions, 0 deletions
diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c index 584727d..2c0b4d7 100644 --- a/drivers/dahdi/dahdi-base.c +++ b/drivers/dahdi/dahdi-base.c @@ -2801,6 +2801,7 @@ static int dahdi_specchan_release(struct file *file) if (chan) { /* Chan lock protects contents against potentially non atomic accesses. * So if the pointer setting is not atomic, we should protect */ +#ifdef CONFIG_DAHDI_MIRROR if (chan->srcmirror) { struct dahdi_chan *const srcmirror = chan->srcmirror; spin_lock_irqsave(&srcmirror->lock, flags); @@ -2821,11 +2822,14 @@ static int dahdi_specchan_release(struct file *file) } spin_unlock_irqrestore(&chan->srcmirror->lock, flags); } +#endif /* CONFIG_DAHDI_MIRROR */ spin_lock_irqsave(&chan->lock, flags); chan->file = NULL; file->private_data = NULL; +#ifdef CONFIG_DAHDI_MIRROR chan->srcmirror = NULL; +#endif /* CONFIG_DAHDI_MIRROR */ spin_unlock_irqrestore(&chan->lock, flags); close_channel(chan); @@ -5042,6 +5046,7 @@ static int dahdi_ioctl_iomux(struct file *file, unsigned long data) return ret; } +#ifdef CONFIG_DAHDI_MIRROR static int dahdi_ioctl_rxmirror(struct file *file, unsigned long data) { int res; @@ -5128,6 +5133,7 @@ static int dahdi_ioctl_txmirror(struct file *file, unsigned long data) return 0; } +#endif /* CONFIG_DAHDI_MIRROR */ static int dahdi_chanandpseudo_ioctl(struct file *file, unsigned int cmd, @@ -5145,11 +5151,13 @@ dahdi_chanandpseudo_ioctl(struct file *file, unsigned int cmd, if (!chan) return -EINVAL; switch(cmd) { +#ifdef CONFIG_DAHDI_MIRROR case DAHDI_RXMIRROR: return dahdi_ioctl_rxmirror(file, data); case DAHDI_TXMIRROR: return dahdi_ioctl_txmirror(file, data); +#endif /* CONFIG_DAHDI_MIRROR */ case DAHDI_DIALING: spin_lock_irqsave(&chan->lock, flags); @@ -6668,7 +6676,9 @@ static inline void __dahdi_getbuf_chunk(struct dahdi_chan *ss, unsigned char *tx { +#ifdef CONFIG_DAHDI_MIRROR unsigned char *orig_txb = txb; +#endif /* CONFIG_DAHDI_MIRROR */ /* Called with ss->lock held */ /* We transmit data from our master channel */ @@ -6832,11 +6842,13 @@ out in the later versions, and is put back now. */ } } +#ifdef CONFIG_DAHDI_MIRROR if (ss->txmirror) { spin_lock(&ss->txmirror->lock); __putbuf_chunk(ss->txmirror, orig_txb, DAHDI_CHUNKSIZE); spin_unlock(&ss->txmirror->lock); } +#endif /* CONFIG_DAHDI_MIRROR */ } static inline void rbs_itimer_expire(struct dahdi_chan *chan) @@ -8012,11 +8024,13 @@ static inline void __dahdi_putbuf_chunk(struct dahdi_chan *ss, unsigned char *rx { __putbuf_chunk(ss, rxb, DAHDI_CHUNKSIZE); +#ifdef CONFIG_DAHDI_MIRROR if (ss->rxmirror) { spin_lock(&ss->rxmirror->lock); __putbuf_chunk(ss->rxmirror, rxb, DAHDI_CHUNKSIZE); spin_unlock(&ss->rxmirror->lock); } +#endif /* CONFIG_DAHDI_MIRROR */ } static void __dahdi_hdlc_abort(struct dahdi_chan *ss, int event) diff --git a/include/dahdi/dahdi_config.h b/include/dahdi/dahdi_config.h index 9c50730..032a9d7 100644 --- a/include/dahdi/dahdi_config.h +++ b/include/dahdi/dahdi_config.h @@ -184,4 +184,9 @@ */ /* #define DAHDI_AUDIO_NOTIFY */ +/* + * Creates an interface for mirroring the raw channel data out to a pseudo-chan + */ +/*#define CONFIG_DAHDI_MIRROR*/ + #endif diff --git a/include/dahdi/kernel.h b/include/dahdi/kernel.h index e1c8927..d7b5ba1 100644 --- a/include/dahdi/kernel.h +++ b/include/dahdi/kernel.h @@ -444,9 +444,11 @@ struct dahdi_chan { struct file *file; /*!< File structure */ +#ifdef CONFIG_DAHDI_MIRROR struct dahdi_chan *rxmirror; /*!< channel we mirror reads to */ struct dahdi_chan *txmirror; /*!< channel we mirror writes to */ struct dahdi_chan *srcmirror; /*!< channel we mirror from */ +#endif /* CONFIG_DAHDI_MIRROR */ struct dahdi_span *span; /*!< Span we're a member of */ int sig; /*!< Signalling */ int sigcap; /*!< Capability for signalling */ diff --git a/include/dahdi/user.h b/include/dahdi/user.h index fe4be66..e743cad 100644 --- a/include/dahdi/user.h +++ b/include/dahdi/user.h @@ -37,6 +37,7 @@ #include <linux/types.h> #include <linux/ioctl.h> +#include <dahdi/dahdi_config.h> #ifndef ELAST #define ELAST 500 @@ -1079,8 +1080,10 @@ struct dahdi_vmwi_info { /* * Defines which channel to receive mirrored traffic from */ +#ifdef CONFIG_DAHDI_MIRROR #define DAHDI_RXMIRROR _IOW(DAHDI_CODE, 103, int) #define DAHDI_TXMIRROR _IOW(DAHDI_CODE, 104, int) +#endif /* CONFIG_DAHDI_MIRROR */ /* Get current status IOCTL */ /* Defines for Radio Status (dahdi_radio_stat.radstat) bits */ |