Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F177331342
D61146.1794142046.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
3 KB
Referenced Files
None
Subscribers
None
D61146.1794142046.diff
View Options
diff --git a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c
--- a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c
+++ b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c
@@ -82,10 +82,10 @@
/* maximum number of ticks between updates of device table */
uint32_t device_tbl_refresh = 10 * 100;
-/* socket for /var/run/devd.pipe */
+/* socket for /var/run/devd.seqpacket.pipe */
static int devd_sock = -1;
-/* used to wait notifications from /var/run/devd.pipe */
+/* used to wait notifications from /var/run/devd.seqpacket.pipe */
static void *devd_fd;
/* some constants */
@@ -401,29 +401,26 @@
static int
create_devd_socket(void)
{
+ struct sockaddr_un devd_addr = {
+ .sun_family = AF_LOCAL,
+ .sun_len = sizeof(devd_addr),
+ .sun_path = PATH_DEVD_PIPE,
+ };
int d_sock;
- struct sockaddr_un devd_addr;
- bzero(&devd_addr, sizeof(struct sockaddr_un));
-
- if ((d_sock = socket(PF_LOCAL, SOCK_STREAM, 0)) < 0) {
+ if ((d_sock = socket(PF_LOCAL, SOCK_SEQPACKET, 0)) < 0) {
syslog(LOG_ERR, "Failed to create the socket for %s: %m",
- PATH_DEVD_PIPE);
+ devd_addr.sun_path);
return (-1);
}
- devd_addr.sun_family = PF_LOCAL;
- devd_addr.sun_len = sizeof(devd_addr);
- strlcpy(devd_addr.sun_path, PATH_DEVD_PIPE,
- sizeof(devd_addr.sun_path) - 1);
-
if (connect(d_sock, (struct sockaddr *)&devd_addr,
sizeof(devd_addr)) == -1) {
syslog(LOG_ERR,"Failed to connect socket for %s: %m",
- PATH_DEVD_PIPE);
+ devd_addr.sun_path);
if (close(d_sock) < 0 )
syslog(LOG_ERR,"Failed to close socket for %s: %m",
- PATH_DEVD_PIPE);
+ devd_addr.sun_path);
return (-1);
}
@@ -439,46 +436,29 @@
static void
devd_socket_callback(int fd, void *arg __unused)
{
- char buf[512];
- int read_len = -1;
+ char buf[DEVCTL_BUFFER];
+ ssize_t len;
assert(fd == devd_sock);
HRDBG("called");
-again:
- read_len = read(fd, buf, sizeof(buf));
- if (read_len < 0) {
- if (errno == EBADF) {
- devd_sock = -1;
- if (devd_fd != NULL) {
- fd_deselect(devd_fd);
- devd_fd = NULL;
- }
- syslog(LOG_ERR, "Closing devd_fd, revert to "
- "devinfo polling");
- }
-
- } else if (read_len == 0) {
- syslog(LOG_ERR, "zero bytes read from devd pipe... "
- "closing socket!");
-
- if (close(devd_sock) < 0 )
- syslog(LOG_ERR, "Failed to close devd socket: %m");
-
+ if ((len = read(fd, buf, sizeof(buf))) > 0) {
+ /* Only refresh device table on a device add or remove event. */
+ if (buf[0] == '+' || buf[0] == '-')
+ refresh_device_tbl(1);
+ } else {
+ if (len == 0)
+ syslog(LOG_ERR, "zero bytes read(2) on devd socket");
+ else
+ syslog(LOG_ERR, "read(2) on devd socket: %m");
+ syslog(LOG_ERR, "Reverting to devinfo polling");
+ (void)close(devd_sock);
devd_sock = -1;
if (devd_fd != NULL) {
fd_deselect(devd_fd);
devd_fd = NULL;
}
- syslog(LOG_ERR, "Closing devd_fd, revert to devinfo polling");
-
- } else {
- if (read_len == sizeof(buf))
- goto again;
- /* Only refresh device table on a device add or remove event. */
- if (buf[0] == '+' || buf[0] == '-')
- refresh_device_tbl(1);
}
}
diff --git a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.h b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.h
--- a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.h
+++ b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.h
@@ -81,7 +81,13 @@
#endif /*NDEBUG*/
/* path to devd(8) output pipe */
-#define PATH_DEVD_PIPE "/var/run/devd.pipe"
+#define PATH_DEVD_PIPE "/var/run/devd.seqpacket.pipe"
+/*
+ * XXXGL: the kernel has DEVCTL_BUFFER slightly less than 1024. The devd(8)
+ * has DEVCTL_MAXBUF set to 8192. This needs to be in /usr/include and
+ * documented.
+ */
+#define DEVCTL_BUFFER 1024
#define IS_KERNPROC(kp) (((kp)->ki_flag & P_KPROC) == P_KPROC)
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Nov 8, 12:47 PM (22 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41586312
Default Alt Text
D61146.1794142046.diff (3 KB)
Attached To
Mode
D61146: snmp_hostres(3): strengthen work on the devd(8) socket
Attached
Detach File
Event Timeline