Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
net-tools
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
net-tools
Commits
f6baf958
Commit
f6baf958
authored
Dec 05, 2011
by
Lubomir Rintel
Committed by
Bernd Eckenfels
Dec 15, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add Bluetooth socket support
Signed-off-by:
Bernd Eckenfels
<
bernd@eckenfels.net
>
parent
ca46fb15
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
172 additions
and
2 deletions
+172
-2
config.in
config.in
+1
-0
lib/af.c
lib/af.c
+4
-0
lib/net-support.h
lib/net-support.h
+2
-0
lib/pathnames.h
lib/pathnames.h
+2
-0
netstat.c
netstat.c
+163
-2
No files found.
config.in
View file @
f6baf958
...
...
@@ -59,6 +59,7 @@ bool 'X.25 (CCITT) protocol family' HAVE_AFX25 y
bool 'Econet protocol family' HAVE_AFECONET y
bool 'DECnet protocol family' HAVE_AFDECnet n
bool 'Ash protocol family' HAVE_AFASH y
bool 'Bluetooth protocol family' HAVE_BLUETOOTH y
*
*
* Device Hardware types.
...
...
lib/af.c
View file @
f6baf958
...
...
@@ -38,6 +38,7 @@ int flag_econet;
int
flag_rose
;
int
flag_x25
=
0
;
int
flag_ash
;
int
flag_bluetooth
;
struct
aftrans_t
{
...
...
@@ -91,6 +92,9 @@ struct aftrans_t {
{
"ash"
,
"ash"
,
&
flag_ash
},
{
"bluetooth"
,
"bluetooth"
,
&
flag_bluetooth
},
{
0
,
0
,
0
}
...
...
lib/net-support.h
View file @
f6baf958
...
...
@@ -135,6 +135,7 @@ extern int flag_x25;
extern
int
flag_rose
;
extern
int
flag_inet
;
extern
int
flag_inet6
;
extern
int
flag_bluetooth
;
extern
char
afname
[];
...
...
@@ -150,6 +151,7 @@ extern char afname[];
{"ddp", 0, 0, 1}, \
{"rose", 0, 0, 1}, \
{"unix", 0, 0, 1}, \
{"bluetooth", 0, 0, 1}, \
{"tcpip", 0, 0, 1}
#define AFTRANS_CNT 12
...
...
lib/pathnames.h
View file @
f6baf958
...
...
@@ -53,6 +53,8 @@
#define _PATH_PROCNET_X25_ROUTE "/proc/net/x25_routes"
#define _PATH_PROCNET_DEV_MCAST "/proc/net/dev_mcast"
#define _PATH_PROCNET_ATALK_ROUTE "/proc/net/atalk_route"
#define _PATH_SYS_BLUETOOTH_L2CAP "/sys/class/bluetooth/l2cap"
#define _PATH_SYS_BLUETOOTH_RFCOMM "/sys/class/bluetooth/rfcomm"
/* pathname for the netlink device */
#define _PATH_DEV_ROUTE "/dev/route"
...
...
netstat.c
View file @
f6baf958
...
...
@@ -99,6 +99,10 @@
#include "util.h"
#include "proc.h"
#if HAVE_BLUETOOTH
#include <bluetooth/bluetooth.h>
#endif
#define PROGNAME_WIDTH 20
#if !defined(s6_addr32) && defined(in6a_words)
...
...
@@ -158,6 +162,8 @@ int flag_wide= 0;
int
flag_prg
=
0
;
int
flag_arg
=
0
;
int
flag_ver
=
0
;
int
flag_l2cap
=
0
;
int
flag_rfcomm
=
0
;
FILE
*
procinfo
;
...
...
@@ -1611,6 +1617,116 @@ static int ipx_info(void)
}
#endif
#if HAVE_BLUETOOTH
const
char
*
bluetooth_state
(
int
state
)
{
switch
(
state
)
{
case
BT_CONNECTED
:
return
_
(
"CONNECTED"
);
case
BT_OPEN
:
return
_
(
"OPEN"
);
case
BT_BOUND
:
return
_
(
"BOUND"
);
case
BT_LISTEN
:
return
_
(
"LISTEN"
);
case
BT_CONNECT
:
return
_
(
"CONNECT"
);
case
BT_CONNECT2
:
return
_
(
"CONNECT2"
);
case
BT_CONFIG
:
return
_
(
"CONFIG"
);
case
BT_DISCONN
:
return
_
(
"DISCONN"
);
case
BT_CLOSED
:
return
_
(
"CLOSED"
);
default:
return
_
(
"UNKNOWN"
);
}
}
static
void
l2cap_do_one
(
int
nr
,
const
char
*
line
,
const
char
*
prot
)
{
char
daddr
[
18
],
saddr
[
18
];
unsigned
state
,
psm
,
dcid
,
scid
,
imtu
,
omtu
,
sec_level
;
int
num
;
const
char
*
bt_state
,
*
bt_sec_level
;
num
=
sscanf
(
line
,
"%17s %17s %d %d 0x%04x 0x%04x %d %d %d"
,
daddr
,
saddr
,
&
state
,
&
psm
,
&
dcid
,
&
scid
,
&
imtu
,
&
omtu
,
&
sec_level
);
if
(
num
<
9
)
{
fprintf
(
stderr
,
_
(
"warning, got bogus l2cap line.
\n
"
));
return
;
}
if
(
flag_lst
&&
!
(
state
==
BT_LISTEN
||
state
==
BT_BOUND
))
return
;
if
(
!
(
flag_all
||
flag_lst
)
&&
(
state
==
BT_LISTEN
||
state
==
BT_BOUND
))
return
;
bt_state
=
bluetooth_state
(
state
);
switch
(
sec_level
)
{
case
BT_SECURITY_SDP
:
bt_sec_level
=
_
(
"SDP"
);
break
;
case
BT_SECURITY_LOW
:
bt_sec_level
=
_
(
"LOW"
);
break
;
case
BT_SECURITY_MEDIUM
:
bt_sec_level
=
_
(
"MEDIUM"
);
break
;
case
BT_SECURITY_HIGH
:
bt_sec_level
=
_
(
"HIGH"
);
break
;
default:
bt_sec_level
=
_
(
"UNKNOWN"
);
}
printf
(
"l2cap %-17s %-17s %-9s %7d 0x%04x 0x%04x %7d %7d %-7s
\n
"
,
(
strcmp
(
daddr
,
"00:00:00:00:00:00"
)
==
0
?
"*"
:
daddr
),
(
strcmp
(
saddr
,
"00:00:00:00:00:00"
)
==
0
?
"*"
:
saddr
),
bt_state
,
psm
,
dcid
,
scid
,
imtu
,
omtu
,
bt_sec_level
);
}
static
int
l2cap_info
(
void
)
{
printf
(
"%-6s %-17s %-17s %-9s %7s %-6s %-6s %7s %7s %-7s
\n
"
,
"Proto"
,
"Destination"
,
"Source"
,
"State"
,
"PSM"
,
"DCID"
,
"SCID"
,
"IMTU"
,
"OMTU"
,
"Security"
);
INFO_GUTS
(
_PATH_SYS_BLUETOOTH_L2CAP
,
"AF BLUETOOTH"
,
l2cap_do_one
,
"l2cap"
);
}
static
void
rfcomm_do_one
(
int
nr
,
const
char
*
line
,
const
char
*
prot
)
{
char
daddr
[
18
],
saddr
[
18
];
unsigned
state
,
channel
;
int
num
;
const
char
*
bt_state
;
num
=
sscanf
(
line
,
"%17s %17s %d %d"
,
daddr
,
saddr
,
&
state
,
&
channel
);
if
(
num
<
4
)
{
fprintf
(
stderr
,
_
(
"warning, got bogus rfcomm line.
\n
"
));
return
;
}
if
(
flag_lst
&&
!
(
state
==
BT_LISTEN
||
state
==
BT_BOUND
))
return
;
if
(
!
(
flag_all
||
flag_lst
)
&&
(
state
==
BT_LISTEN
||
state
==
BT_BOUND
))
return
;
bt_state
=
bluetooth_state
(
state
);
printf
(
"rfcomm %-17s %-17s %-9s %7d
\n
"
,
(
strcmp
(
daddr
,
"00:00:00:00:00:00"
)
==
0
?
"*"
:
daddr
),
(
strcmp
(
saddr
,
"00:00:00:00:00:00"
)
==
0
?
"*"
:
saddr
),
bt_state
,
channel
);
}
static
int
rfcomm_info
(
void
)
{
printf
(
"%-6s %-17s %-17s %-9s %7s
\n
"
,
"Proto"
,
"Destination"
,
"Source"
,
"State"
,
"Channel"
);
INFO_GUTS
(
_PATH_SYS_BLUETOOTH_RFCOMM
,
"AF BLUETOOTH"
,
rfcomm_do_one
,
"rfcomm"
);
}
#endif
static
int
iface_info
(
void
)
{
if
(
skfd
<
0
)
{
...
...
@@ -1705,6 +1821,8 @@ int main
{
"udplite"
,
0
,
0
,
'U'
},
{
"raw"
,
0
,
0
,
'w'
},
{
"unix"
,
0
,
0
,
'x'
},
{
"l2cap"
,
0
,
0
,
'2'
},
{
"rfcomm"
,
0
,
0
,
'f'
},
{
"listening"
,
0
,
0
,
'l'
},
{
"all"
,
0
,
0
,
'a'
},
{
"timers"
,
0
,
0
,
'o'
},
...
...
@@ -1836,6 +1954,12 @@ int main
case
'w'
:
flag_raw
++
;
break
;
case
'2'
:
flag_l2cap
++
;
break
;
case
'f'
:
flag_rfcomm
++
;
break
;
case
'x'
:
if
(
aftrans_opt
(
"unix"
))
exit
(
1
);
...
...
@@ -1858,8 +1982,12 @@ int main
!
(
flag_inet
||
flag_inet6
))
flag_inet
=
flag_inet6
=
1
;
if
(
flag_bluetooth
&&
!
(
flag_l2cap
||
flag_rfcomm
))
flag_l2cap
=
flag_rfcomm
=
1
;
flag_arg
=
flag_tcp
+
flag_sctp
+
flag_udplite
+
flag_udp
+
flag_raw
+
flag_unx
+
flag_ipx
+
flag_ax25
+
flag_netrom
+
flag_igmp
+
flag_x25
+
flag_rose
;
+
flag_ipx
+
flag_ax25
+
flag_netrom
+
flag_igmp
+
flag_x25
+
flag_rose
+
flag_l2cap
+
flag_rfcomm
;
if
(
flag_mas
)
{
#if HAVE_FW_MASQUERADE && HAVE_AFINET
...
...
@@ -2084,7 +2212,40 @@ int main
}
#endif
}
if
(
!
flag_arg
||
flag_l2cap
||
flag_rfcomm
)
{
#if HAVE_BLUETOOTH
printf
(
_
(
"Active Bluetooth connections "
));
/* xxx */
if
(
flag_all
)
printf
(
_
(
"(servers and established)"
));
else
{
if
(
flag_lst
)
printf
(
_
(
"(only servers)"
));
else
printf
(
_
(
"(w/o servers)"
));
}
printf
(
"
\n
"
);
#else
if
(
flag_arg
)
{
i
=
1
;
ENOSUPP
(
"netstat"
,
"AF BLUETOOTH"
);
}
#endif
}
#if HAVE_BLUETOOTH
if
(
!
flag_arg
||
flag_l2cap
)
{
i
=
l2cap_info
();
if
(
i
)
return
(
i
);
}
if
(
!
flag_arg
||
flag_rfcomm
)
{
i
=
rfcomm_info
();
if
(
i
)
return
(
i
);
}
#endif
if
(
!
flag_cnt
||
i
)
break
;
wait_continous
();
...
...
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