[asterisk-dev] "56k" in dahdi/system.conf [was Re: [svn-commits] mattf: tools/trunk r4818 - /tools/trunk/dahdi_cfg.c]
Matthew Fredrickson
creslin at digium.com
Mon Aug 25 09:54:52 CDT 2008
Tzafrir Cohen wrote:
> Hi
>
> On Sun, Aug 24, 2008 at 05:54:12AM -0000, SVN commits to the Digium repositories wrote:
>> Author: mattf
>> Date: Sun Aug 24 00:54:11 2008
>> New Revision: 4818
>>
>> URL: http://svn.digium.com/view/dahdi?view=rev&rev=4818
>> Log:
>> Add support for 56 KB HDLC as well as selectable rate in system.conf
>>
>> Modified:
>> tools/trunk/dahdi_cfg.c
>
> What does it mean? Where should it be used?
>
> Something in the lines of:
>
> (immedietly following the description of dacsrbs)
>
> # 56k::
> # Set a D-channel (which has already been set above as 'bchan',
> # 'hardhdlc' or 'nethdlc') to use 56kbps HDLC.
>
> The name "56k" sounds strange and and maybe not descriptive enough.
It is basically a call that puts whatever channel that maybe running an
HDLC encoder or decoder (nethdlc, dchan, mtp2, etc) into 56kbps HDLC mode.
>
> Also:
>
>> Modified: tools/trunk/dahdi_cfg.c
>> URL: http://svn.digium.com/view/dahdi/tools/trunk/dahdi_cfg.c?view=diff&rev=4818&r1=4817&r2=4818
>> ==============================================================================
>> --- tools/trunk/dahdi_cfg.c (original)
>> +++ tools/trunk/dahdi_cfg.c Sun Aug 24 00:54:11 2008
>> @@ -85,6 +85,8 @@
>> static const char *sig[DAHDI_MAX_CHANNELS]; /* Signalling */
>>
>> static int slineno[DAHDI_MAX_CHANNELS]; /* Line number where signalling specified */
>> +
>> +static int fiftysixkhdlc[DAHDI_MAX_CHANNELS];
>>
>> static int spans=0;
>>
>> @@ -646,6 +648,49 @@
>> return 0;
>> }
>>
>> +static int setfiftysixkhdlc(char *keyword, char *args)
>> +{
>> + int res;
>> +
>> + res = apply_channels(fiftysixkhdlc, args);
>> + if (res <= 0)
>> + return -1;
>> +
>> + return 0;
>> +}
>> +
>> +static void apply_fiftysix(void)
>> +{
>> + int x;
>> + int rate;
>> + int chanfd;
>> +
>> + for (x = 1; x < DAHDI_MAX_CHANNELS; x++) {
>> + chanfd = open("/dev/dahdi/channel", O_RDWR);
>> + if (chanfd == -1) {
>> + fprintf(stderr, "Couldn't open /dev/zap/channel\n");
>> + exit(-1);
>> + }
>> +
>> + if (ioctl(chanfd, DAHDI_SPECIFY, &x)) {
>> + continue;
>> + }
>> +
>> + if (fiftysixkhdlc[x]) {
>> + printf("Setting channel %d to 56K mode (only valid on HDLC channels)\n", x);
>> + rate = 56;
>> + } else {
>> + rate = 64;
>> + }
>> +
>> + if (ioctl(chanfd, DAHDI_HDLC_RATE, &rate)) {
>> + fprintf(stderr, "Error setting HDLC rate\n");
>> + exit(-1);
>> + }
>> + close(chanfd);
>> + }
>> +}
>> +
>> static int setechocan(char *keyword, char *args)
>> {
>> int res;
>> @@ -1310,6 +1355,7 @@
>> { "channel", rad_chanconfig },
>> { "channels", rad_chanconfig },
>> { "echocanceller", setechocan },
>> + { "56k", setfiftysixkhdlc },
>> };
>>
>> static char *readline()
>
> Here we are in the end of main()
>
>> @@ -1586,5 +1632,6 @@
>> fprintf(stderr, "\n%d error(s) detected\n\n", errcnt);
>> exit(1);
>> }
>> + apply_fiftysix();
>> exit(0);
>> }
>
> Why run this is a separate loop? Re-open /dev/dahdi/channel regardless
> of whether this directive was ever used.
Because if you previously had 56K HDLC enabled on a channel, and
subsequently you change your system.conf to disable it, that is the only
way it will be disabled.
The flag is a sticky flag, and is not reset when the channel is closed
or anything like that.
> The loop above for applying configuration to channels is indeed not a
> pretty sight. 3 nesting levels can be easily removed from it (OK to
> commit that now?)
>
Feel free to improve as you see fit :-)
Matthew Fredrickson
Digium, Inc.
More information about the asterisk-dev
mailing list