Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
db72b2ad
Commit
db72b2ad
authored
Jun 06, 2002
by
Kai Germaschewski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ISDN: Add DoV (Data over Voice) support
(by Guy Ellis)
parent
98c4217c
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
58 additions
and
18 deletions
+58
-18
drivers/isdn/i4l/isdn_net.c
drivers/isdn/i4l/isdn_net.c
+58
-18
No files found.
drivers/isdn/i4l/isdn_net.c
View file @
db72b2ad
...
@@ -9,6 +9,14 @@
...
@@ -9,6 +9,14 @@
* This software may be used and distributed according to the terms
* This software may be used and distributed according to the terms
* of the GNU General Public License, incorporated herein by reference.
* of the GNU General Public License, incorporated herein by reference.
*
*
* Data Over Voice (DOV) support added - Guy Ellis 23-Mar-02
* guy@traverse.com.au
* Outgoing calls - looks for a 'V' in first char of dialed number
* Incoming calls - checks first character of eaz as follows:
* Numeric - accept DATA only - original functionality
* 'V' - accept VOICE (DOV) only
* 'B' - accept BOTH DATA and DOV types
*
* Jan 2001: fix CISCO HDLC Bjoern A. Zeeb <i4l@zabbadoz.net>
* Jan 2001: fix CISCO HDLC Bjoern A. Zeeb <i4l@zabbadoz.net>
* for info on the protocol, see
* for info on the protocol, see
* http://i4l.zabbadoz.net/i4l/cisco-hdlc.txt
* http://i4l.zabbadoz.net/i4l/cisco-hdlc.txt
...
@@ -569,6 +577,7 @@ isdn_net_dial(void)
...
@@ -569,6 +577,7 @@ isdn_net_dial(void)
int
i
;
int
i
;
unsigned
long
flags
;
unsigned
long
flags
;
isdn_ctrl
cmd
;
isdn_ctrl
cmd
;
u_char
*
phone_number
;
while
(
p
)
{
while
(
p
)
{
isdn_net_local
*
lp
=
p
->
local
;
isdn_net_local
*
lp
=
p
->
local
;
...
@@ -667,7 +676,20 @@ isdn_net_dial(void)
...
@@ -667,7 +676,20 @@ isdn_net_dial(void)
break
;
break
;
}
}
sprintf
(
cmd
.
parm
.
setup
.
phone
,
"%s"
,
lp
->
dial
->
num
);
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
command
=
ISDN_CMD_DIAL
;
cmd
.
parm
.
setup
.
si2
=
0
;
/* check for DOV */
phone_number
=
lp
->
dial
->
num
;
if
((
*
phone_number
==
'v'
)
||
(
*
phone_number
==
'V'
))
{
/* DOV call */
cmd
.
parm
.
setup
.
si1
=
1
;
}
else
{
/* DATA call */
cmd
.
parm
.
setup
.
si1
=
7
;
}
strcpy
(
cmd
.
parm
.
setup
.
phone
,
phone_number
);
/*
/*
* Switch to next number or back to start if at end of list.
* Switch to next number or back to start if at end of list.
*/
*/
...
@@ -687,10 +709,6 @@ isdn_net_dial(void)
...
@@ -687,10 +709,6 @@ isdn_net_dial(void)
}
}
}
}
restore_flags
(
flags
);
restore_flags
(
flags
);
cmd
.
driver
=
lp
->
isdn_device
;
cmd
.
command
=
ISDN_CMD_DIAL
;
cmd
.
parm
.
setup
.
si1
=
7
;
cmd
.
parm
.
setup
.
si2
=
0
;
sprintf
(
cmd
.
parm
.
setup
.
eazmsn
,
"%s"
,
sprintf
(
cmd
.
parm
.
setup
.
eazmsn
,
"%s"
,
isdn_map_eaz2msn
(
lp
->
msn
,
cmd
.
driver
));
isdn_map_eaz2msn
(
lp
->
msn
,
cmd
.
driver
));
i
=
isdn_dc2minor
(
lp
->
isdn_device
,
lp
->
isdn_channel
);
i
=
isdn_dc2minor
(
lp
->
isdn_device
,
lp
->
isdn_channel
);
...
@@ -699,8 +717,9 @@ isdn_net_dial(void)
...
@@ -699,8 +717,9 @@ isdn_net_dial(void)
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
dev
->
usage
[
i
]
|=
ISDN_USAGE_OUTGOING
;
isdn_info_update
();
isdn_info_update
();
}
}
printk
(
KERN_INFO
"%s: dialing %d %s...
\n
"
,
lp
->
name
,
printk
(
KERN_INFO
"%s: dialing %d %s... %s
\n
"
,
lp
->
name
,
lp
->
dialretry
,
cmd
.
parm
.
setup
.
phone
);
lp
->
dialretry
,
cmd
.
parm
.
setup
.
phone
,
(
cmd
.
parm
.
setup
.
si1
==
1
)
?
"DOV"
:
""
);
lp
->
dtimer
=
0
;
lp
->
dtimer
=
0
;
#ifdef ISDN_DEBUG_NET_DIAL
#ifdef ISDN_DEBUG_NET_DIAL
printk
(
KERN_DEBUG
"dial: d=%d c=%d
\n
"
,
lp
->
isdn_device
,
printk
(
KERN_DEBUG
"dial: d=%d c=%d
\n
"
,
lp
->
isdn_device
,
...
@@ -2140,6 +2159,8 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
...
@@ -2140,6 +2159,8 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
isdn_net_phone
*
n
;
isdn_net_phone
*
n
;
ulong
flags
;
ulong
flags
;
char
nr
[
32
];
char
nr
[
32
];
char
*
my_eaz
;
/* Search name in netdev-chain */
/* Search name in netdev-chain */
save_flags
(
flags
);
save_flags
(
flags
);
cli
();
cli
();
...
@@ -2158,15 +2179,17 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
...
@@ -2158,15 +2179,17 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
eaz
=
setup
->
eazmsn
;
eaz
=
setup
->
eazmsn
;
if
(
dev
->
net_verbose
>
1
)
if
(
dev
->
net_verbose
>
1
)
printk
(
KERN_INFO
"isdn_net: call from %s,%d,%d -> %s
\n
"
,
nr
,
si1
,
si2
,
eaz
);
printk
(
KERN_INFO
"isdn_net: call from %s,%d,%d -> %s
\n
"
,
nr
,
si1
,
si2
,
eaz
);
/* Accept only calls with Si1 = 7 (Data-Transmission) */
/* Accept DATA and VOICE calls at this stage
if
(
si1
!=
7
)
{
local eaz is checked later for allowed call types */
if
((
si1
!=
7
)
&&
(
si1
!=
1
))
{
restore_flags
(
flags
);
restore_flags
(
flags
);
if
(
dev
->
net_verbose
>
1
)
if
(
dev
->
net_verbose
>
1
)
printk
(
KERN_INFO
"isdn_net: Service-Indicator not
7, ignored
\n
"
);
printk
(
KERN_INFO
"isdn_net: Service-Indicator not 1 or
7, ignored
\n
"
);
return
0
;
return
0
;
}
}
n
=
(
isdn_net_phone
*
)
0
;
p
=
dev
->
netdev
;
n
=
(
isdn_net_phone
*
)
0
;
p
=
dev
->
netdev
;
ematch
=
wret
=
swapped
=
0
;
ematch
=
wret
=
swapped
=
0
;
#ifdef ISDN_DEBUG_NET_ICALL
#ifdef ISDN_DEBUG_NET_ICALL
printk
(
KERN_DEBUG
"n_fi: di=%d ch=%d idx=%d usg=%d
\n
"
,
di
,
ch
,
idx
,
printk
(
KERN_DEBUG
"n_fi: di=%d ch=%d idx=%d usg=%d
\n
"
,
di
,
ch
,
idx
,
...
@@ -2186,8 +2209,25 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
...
@@ -2186,8 +2209,25 @@ isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup)
break
;
break
;
}
}
swapped
=
0
;
swapped
=
0
;
if
(
!
(
matchret
=
isdn_msncmp
(
eaz
,
isdn_map_eaz2msn
(
lp
->
msn
,
di
))))
/* check acceptable call types for DOV */
my_eaz
=
isdn_map_eaz2msn
(
lp
->
msn
,
di
);
if
(
si1
==
1
)
{
/* it's a DOV call, check if we allow it */
if
(
*
my_eaz
==
'v'
||
*
my_eaz
==
'V'
||
*
my_eaz
==
'b'
||
*
my_eaz
==
'B'
)
my_eaz
++
;
/* skip to allow a match */
else
my_eaz
=
0
;
/* force non match */
}
else
{
/* it's a DATA call, check if we allow it */
if
(
*
my_eaz
==
'b'
||
*
my_eaz
==
'B'
)
my_eaz
++
;
/* skip to allow a match */
}
if
(
my_eaz
)
matchret
=
isdn_msncmp
(
eaz
,
my_eaz
);
else
matchret
=
1
;
if
(
!
matchret
)
ematch
=
1
;
ematch
=
1
;
/* Remember if more numbers eventually can match */
/* Remember if more numbers eventually can match */
if
(
matchret
>
wret
)
if
(
matchret
>
wret
)
wret
=
matchret
;
wret
=
matchret
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment