sync with OpenBSD -current
This commit is contained in:
parent
c22b8a6120
commit
1abf3d5d6c
@ -1 +1 @@
|
||||
# SecBSD 1.4-731e06f: Mon Nov 20 02:17:28 UTC 2023 (Mictlantecuhtli)
|
||||
# SecBSD 1.4-4ca0067: Tue Nov 21 07:49:44 UTC 2023 (Mictlantecuhtli)
|
||||
|
@ -1572,7 +1572,7 @@ static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,
|
||||
options::OPT_mbranch_protection_EQ)
|
||||
: Args.getLastArg(options::OPT_mbranch_protection_EQ);
|
||||
if (!A) {
|
||||
if (Triple.isOSOpenBSD()) {
|
||||
if (Triple.isOSOpenBSD() && isAArch64) {
|
||||
CmdArgs.push_back("-msign-return-address=non-leaf");
|
||||
CmdArgs.push_back("-msign-return-address-key=a_key");
|
||||
CmdArgs.push_back("-mbranch-target-enforce");
|
||||
@ -1594,7 +1594,7 @@ static void CollectARMPACBTIOptions(const ToolChain &TC, const ArgList &Args,
|
||||
D.Diag(diag::err_drv_unsupported_option_argument)
|
||||
<< A->getSpelling() << Scope;
|
||||
Key = "a_key";
|
||||
if (Triple.isOSOpenBSD())
|
||||
if (Triple.isOSOpenBSD() && isAArch64)
|
||||
IndirectBranches = true;
|
||||
else
|
||||
IndirectBranches = false;
|
||||
|
@ -144,7 +144,7 @@ uint32_t RISCV::calcEFlags() const {
|
||||
target |= EF_RISCV_RVC;
|
||||
|
||||
if ((eflags & EF_RISCV_FLOAT_ABI) != (target & EF_RISCV_FLOAT_ABI))
|
||||
error(
|
||||
warn(
|
||||
toString(f) +
|
||||
": cannot link object files with different floating-point ABI from " +
|
||||
toString(ctx.objectFiles[0]));
|
||||
|
@ -104,7 +104,7 @@ static StringRef getOutputSectionName(const InputSectionBase *s) {
|
||||
{".data.rel.ro", ".data", ".rodata", ".bss.rel.ro", ".bss",
|
||||
".gcc_except_table", ".init_array", ".fini_array", ".tbss", ".tdata",
|
||||
".ARM.exidx", ".ARM.extab", ".ctors", ".dtors",
|
||||
".openbsd.randomdata.", ".openbsd.mutable."})
|
||||
".openbsd.randomdata", ".openbsd.mutable"})
|
||||
if (isSectionPrefix(v, s->name))
|
||||
return v;
|
||||
|
||||
|
@ -832,6 +832,13 @@ static bool maybeReportUndefined(Undefined &sym, InputSectionBase &sec,
|
||||
if (sym.discardedSecIdx != 0 && (sec.name == ".got2" || sec.name == ".toc"))
|
||||
return false;
|
||||
|
||||
#ifdef __OpenBSD__
|
||||
// GCC (at least 8 and 11) can produce a ".gcc_except_table" with relocations
|
||||
// to discarded sections on riscv64
|
||||
if (sym.discardedSecIdx != 0 && sec.name == ".gcc_except_table")
|
||||
return false;
|
||||
#endif
|
||||
|
||||
bool isWarning =
|
||||
(config->unresolvedSymbols == UnresolvedPolicy::Warn && canBeExternal) ||
|
||||
config->noinhibitExec;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: asr_private.h,v 1.48 2022/11/17 17:39:41 florian Exp $ */
|
||||
/* $OpenBSD: asr_private.h,v 1.49 2023/11/20 12:15:16 florian Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
|
||||
*
|
||||
@ -299,6 +299,7 @@ int _asr_sockaddr_from_str(struct sockaddr *, int, const char *);
|
||||
ssize_t _asr_dname_from_fqdn(const char *, char *, size_t);
|
||||
ssize_t _asr_addr_as_fqdn(const char *, int, char *, size_t);
|
||||
int hnok_lenient(const char *);
|
||||
int _asr_is_localhost(const char*);
|
||||
|
||||
/* asr.c */
|
||||
void _asr_resolver_done(void *);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: asr_utils.c,v 1.21 2023/03/15 22:12:00 millert Exp $ */
|
||||
/* $OpenBSD: asr_utils.c,v 1.22 2023/11/20 12:15:16 florian Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2009-2012 Eric Faurot <eric@faurot.net>
|
||||
*
|
||||
@ -582,3 +582,35 @@ hnok_lenient(const char *dn)
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Check if the hostname is localhost or if it's in the localhost domain */
|
||||
int
|
||||
_asr_is_localhost(const char *hn)
|
||||
{
|
||||
size_t hnlen, localhostlen;
|
||||
|
||||
if (hn == NULL)
|
||||
return 0;
|
||||
|
||||
if (strcasecmp(hn, "localhost") == 0 ||
|
||||
strcasecmp(hn, "localhost.") == 0)
|
||||
return 1;
|
||||
|
||||
hnlen = strlen(hn);
|
||||
localhostlen = strlen(".localhost");
|
||||
|
||||
if (hnlen < localhostlen)
|
||||
return 0;
|
||||
|
||||
if (strcasecmp(hn + hnlen - localhostlen, ".localhost") == 0)
|
||||
return 1;
|
||||
|
||||
localhostlen++;
|
||||
if (hnlen < localhostlen)
|
||||
return 0;
|
||||
|
||||
if (strcasecmp(hn + hnlen - localhostlen, ".localhost.") == 0)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: getaddrinfo_async.c,v 1.59 2022/12/27 17:10:06 jmc Exp $ */
|
||||
/* $OpenBSD: getaddrinfo_async.c,v 1.60 2023/11/20 12:15:16 florian Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
|
||||
*
|
||||
@ -115,7 +115,7 @@ getaddrinfo_async_run(struct asr_query *as, struct asr_result *ar)
|
||||
char fqdn[MAXDNAME];
|
||||
const char *str;
|
||||
struct addrinfo *ai;
|
||||
int i, family, r;
|
||||
int i, family, r, is_localhost;
|
||||
FILE *f;
|
||||
union {
|
||||
struct sockaddr sa;
|
||||
@ -228,8 +228,19 @@ getaddrinfo_async_run(struct asr_query *as, struct asr_result *ar)
|
||||
|
||||
ar->ar_gai_errno = 0;
|
||||
|
||||
/* If hostname is NULL, use local address */
|
||||
if (as->as.ai.hostname == NULL) {
|
||||
is_localhost = _asr_is_localhost(as->as.ai.hostname);
|
||||
/*
|
||||
* If hostname is NULL, "localhost" or falls within the
|
||||
* ".localhost." domain, use local address.
|
||||
* RFC 6761, 6.3:
|
||||
* 3. Name resolution APIs and libraries SHOULD recognize
|
||||
* localhost names as special and SHOULD always return the IP
|
||||
* loopback address for address queries and negative responses
|
||||
* for all other query types. Name resolution APIs SHOULD NOT
|
||||
* send queries for localhost names to their configured caching
|
||||
* DNS server(s).
|
||||
*/
|
||||
if (as->as.ai.hostname == NULL || is_localhost) {
|
||||
for (family = iter_family(as, 1);
|
||||
family != -1;
|
||||
family = iter_family(as, 0)) {
|
||||
@ -238,11 +249,12 @@ getaddrinfo_async_run(struct asr_query *as, struct asr_result *ar)
|
||||
* those, rather than parsing over and over.
|
||||
*/
|
||||
if (family == PF_INET)
|
||||
str = (ai->ai_flags & AI_PASSIVE) ? \
|
||||
"0.0.0.0" : "127.0.0.1";
|
||||
str = (ai->ai_flags & AI_PASSIVE &&
|
||||
!is_localhost) ? "0.0.0.0" :
|
||||
"127.0.0.1";
|
||||
else /* PF_INET6 */
|
||||
str = (ai->ai_flags & AI_PASSIVE) ? \
|
||||
"::" : "::1";
|
||||
str = (ai->ai_flags & AI_PASSIVE &&
|
||||
!is_localhost) ? "::" : "::1";
|
||||
/* This can't fail */
|
||||
_asr_sockaddr_from_str(&sa.sa, family, str);
|
||||
if ((r = addrinfo_add(as, &sa.sa, NULL))) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: gethostnamadr_async.c,v 1.47 2023/11/14 08:27:33 florian Exp $ */
|
||||
/* $OpenBSD: gethostnamadr_async.c,v 1.48 2023/11/20 12:15:16 florian Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2012 Eric Faurot <eric@openbsd.org>
|
||||
*
|
||||
@ -209,6 +209,37 @@ gethostnamadr_async_run(struct asr_query *as, struct asr_result *ar)
|
||||
async_set_state(as, ASR_STATE_HALT);
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* If hostname is "localhost" or falls within the
|
||||
* ".localhost." domain, use local address.
|
||||
* RFC 6761, 6.3:
|
||||
* 3. Name resolution APIs and libraries SHOULD
|
||||
* recognize localhost names as special and SHOULD
|
||||
* always return the IP loopback address for address
|
||||
* queries and negative responses for all other query
|
||||
* types. Name resolution APIs SHOULD NOT send queries
|
||||
* for localhost names to their configured caching DNS
|
||||
* server(s).
|
||||
*/
|
||||
|
||||
if (_asr_is_localhost(as->as.hostnamadr.name)) {
|
||||
inet_pton(as->as.hostnamadr.family,
|
||||
as->as.hostnamadr.family == AF_INET ?
|
||||
"127.0.0.1" : "::1", addr);
|
||||
h = hostent_from_addr(as->as.hostnamadr.family,
|
||||
as->as.hostnamadr.name, addr);
|
||||
if (h == NULL) {
|
||||
ar->ar_errno = errno;
|
||||
ar->ar_h_errno = NETDB_INTERNAL;
|
||||
}
|
||||
else {
|
||||
ar->ar_hostent = &h->h;
|
||||
ar->ar_h_errno = NETDB_SUCCESS;
|
||||
}
|
||||
async_set_state(as, ASR_STATE_HALT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
async_set_state(as, ASR_STATE_NEXT_DB);
|
||||
break;
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: freenull.c.head,v 1.7 2023/11/19 13:11:06 tb Exp $ */
|
||||
/* $OpenBSD: freenull.c.head,v 1.8 2023/11/20 01:20:19 tb Exp $ */
|
||||
|
||||
#include <openssl/asn1.h>
|
||||
#include <openssl/cmac.h>
|
||||
@ -6,6 +6,7 @@
|
||||
#include <openssl/comp.h>
|
||||
#include <openssl/conf_api.h>
|
||||
#include <openssl/ct.h>
|
||||
#include <openssl/engine.h>
|
||||
#include <openssl/gost.h>
|
||||
#include <openssl/hmac.h>
|
||||
#include <openssl/ocsp.h>
|
||||
|
@ -1,8 +1,9 @@
|
||||
# $OpenBSD: Makefile,v 1.11 2023/11/16 13:26:45 martijn Exp $
|
||||
# $OpenBSD: Makefile,v 1.12 2023/11/20 10:34:21 martijn Exp $
|
||||
# Regress tests for snmpd
|
||||
|
||||
PROG = snmpd_regress
|
||||
SRCS = snmpd_regress.c agentx.c backend.c snmp.c
|
||||
SRCS+= transport.c
|
||||
|
||||
LDADD= -lutil
|
||||
DPADD= ${LIBUTIL}
|
||||
@ -249,7 +250,14 @@ SNMP_TARGETS+= snmp_v3_usm_noauthpriv
|
||||
REGRESS_TARGETS+= ${SNMP_TARGETS}
|
||||
snmp: ${SNMP_TARGETS}
|
||||
|
||||
.PHONY: agentx backend
|
||||
TRANSPORT_TARGETS+= transport_tcp_get
|
||||
TRANSPORT_TARGETS+= transport_tcp_disconnect
|
||||
TRANSPORT_TARGETS+= transport_tcp_double_get_disconnect
|
||||
|
||||
REGRESS_TARGETS+= ${TRANSPORT_TARGETS}
|
||||
transport: ${TRANSPORT_TARGETS}
|
||||
|
||||
.PHONY: agentx backend snmp transport
|
||||
|
||||
${REGRESS_TARGETS}: snmpd_regress
|
||||
# Always start snmpd if it's not running
|
||||
|
@ -98,6 +98,19 @@ struct varbind {
|
||||
} data;
|
||||
};
|
||||
|
||||
enum snmp_request {
|
||||
REQUEST_GET = 0,
|
||||
REQUEST_GETNEXT = 1,
|
||||
REQUEST_RESPONSE = 2,
|
||||
REQUEST_SET = 3,
|
||||
REQUEST_TRAP = 4,
|
||||
REQUEST_GETBULK = 5,
|
||||
REQUEST_INFORM = 6,
|
||||
REQUEST_TRAPV2 = 7,
|
||||
REQUEST_REPORT = 8
|
||||
};
|
||||
|
||||
|
||||
extern int verbose;
|
||||
extern char *axsocket;
|
||||
extern char *hostname;
|
||||
@ -128,11 +141,13 @@ char *oid_print(struct oid *, char *, size_t);
|
||||
#define MIB_SUBAGENT_UNREGISTER MIB_SUBAGENTS, 4
|
||||
#define MIB_SUBAGENT_BACKEND MIB_SUBAGENTS, 5
|
||||
#define MIB_SUBAGENT_SNMP MIB_SUBAGENTS, 6
|
||||
#define MIB_SUBAGENT_TRANSPORT MIB_SUBAGENTS, 7
|
||||
/* Region used for registration testing */
|
||||
#define MIB_REGISTER MIB_OPENBSD_REGRESS, 2
|
||||
#define MIB_UNREGISTER MIB_OPENBSD_REGRESS, 3
|
||||
#define MIB_BACKEND MIB_OPENBSD_REGRESS, 4
|
||||
#define MIB_SNMP MIB_OPENBSD_REGRESS, 5
|
||||
#define MIB_TRANSPORT MIB_OPENBSD_REGRESS, 6
|
||||
|
||||
#define SYSORTABLE 1, 3, 6, 1, 2, 1, 1, 9
|
||||
|
||||
@ -234,9 +249,12 @@ int32_t snmpv2_get(int, const char *, int32_t, struct varbind *, size_t);
|
||||
int32_t snmpv2_getnext(int, const char *, int32_t, struct varbind *, size_t);
|
||||
int32_t snmpv2_getbulk(int, const char *, int32_t, int32_t, int32_t,
|
||||
struct varbind *, size_t);
|
||||
struct ber_element *snmpv2_build(const char *, enum snmp_request, int32_t,
|
||||
int32_t, int32_t, struct varbind *, size_t);
|
||||
void snmpv2_response_validate(int, int, const char *, int32_t, int32_t, int32_t,
|
||||
struct varbind *, size_t);
|
||||
void snmp_timeout(int, int);
|
||||
void smi_debug_elements(struct ber_element *);
|
||||
|
||||
void backend_get_integer(void);
|
||||
void backend_get_octetstring(void);
|
||||
@ -370,3 +388,6 @@ void backend_error_getnext_nonstandard(void);
|
||||
void backend_error_getbulk_firstrepetition(void);
|
||||
void backend_error_getbulk_secondrepetition(void);
|
||||
void snmp_v3_usm_noauthpriv(void);
|
||||
void transport_tcp_get(void);
|
||||
void transport_tcp_disconnect(void);
|
||||
void transport_tcp_double_get_disconnect(void);
|
||||
|
@ -54,18 +54,6 @@ enum snmp_exception {
|
||||
EXCEPTION_ENDOFMIBVIEW = 2
|
||||
};
|
||||
|
||||
enum snmp_request {
|
||||
REQUEST_GET = 0,
|
||||
REQUEST_GETNEXT = 1,
|
||||
REQUEST_RESPONSE = 2,
|
||||
REQUEST_SET = 3,
|
||||
REQUEST_TRAP = 4,
|
||||
REQUEST_GETBULK = 5,
|
||||
REQUEST_INFORM = 6,
|
||||
REQUEST_TRAPV2 = 7,
|
||||
REQUEST_REPORT = 8
|
||||
};
|
||||
|
||||
enum security_model {
|
||||
SM_USM = 3,
|
||||
SM_TSM = 4
|
||||
@ -127,7 +115,6 @@ struct ber_element *snmp_data2ber_element(enum type, union data *);
|
||||
unsigned int smi_application(struct ber_element *);
|
||||
char *smi_oid2string(struct ber_oid *, char *, size_t);
|
||||
char *smi_print_element(struct ber_element *);
|
||||
void smi_debug_elements(struct ber_element *);
|
||||
struct ber_element *v2cmps(struct ber_element *, const char *);
|
||||
void snmp_pdu_validate(struct ber_element *, enum snmp_request, int32_t,
|
||||
int32_t, int32_t, struct varbind *, size_t);
|
||||
@ -243,6 +230,23 @@ snmpv2_getbulk(int s, const char *community, int32_t requestid, int32_t nonrep,
|
||||
maxrep, varbindlist, nvarbind);
|
||||
}
|
||||
|
||||
struct ber_element *
|
||||
snmpv2_build(const char *community, enum snmp_request request,
|
||||
int32_t requestid, int32_t error, int32_t index,
|
||||
struct varbind *varbindlist, size_t nvarbind)
|
||||
{
|
||||
struct ber_element *message;
|
||||
|
||||
if (community == NULL)
|
||||
community = SNMP_R_COMMUNITY;
|
||||
message = ober_printf_elements(NULL, "{dse}", 1, community,
|
||||
snmp_pdu(request, requestid, error, index, varbindlist, nvarbind));
|
||||
if (message == NULL)
|
||||
err(1, NULL);
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
int32_t
|
||||
snmpv2_send(int s, const char *community, enum snmp_request request,
|
||||
int32_t requestid, int32_t error, int32_t index,
|
||||
@ -253,14 +257,11 @@ snmpv2_send(int s, const char *community, enum snmp_request request,
|
||||
void *buf;
|
||||
ssize_t buflen, writelen;
|
||||
|
||||
if (community == NULL)
|
||||
community = SNMP_R_COMMUNITY;
|
||||
while (requestid == 0)
|
||||
requestid = arc4random();
|
||||
message = ober_printf_elements(NULL, "{dse}", 1, community,
|
||||
snmp_pdu(request, requestid, error, index, varbindlist, nvarbind));
|
||||
if (message == NULL)
|
||||
err(1, NULL);
|
||||
|
||||
message = snmpv2_build(community, request, requestid, error, index,
|
||||
varbindlist,nvarbind);
|
||||
|
||||
if (ober_write_elements(&ber, message) == -1)
|
||||
err(1, "ober_write_elements");
|
||||
|
@ -213,7 +213,10 @@ const struct {
|
||||
{ "backend_error_getnext_nonstandard", backend_error_getnext_nonstandard },
|
||||
{ "backend_error_getbulk_firstrepetition", backend_error_getbulk_firstrepetition },
|
||||
{ "backend_error_getbulk_secondrepetition", backend_error_getbulk_secondrepetition },
|
||||
{ "snmp_v3_usm_noauthpriv", snmp_v3_usm_noauthpriv},
|
||||
{ "snmp_v3_usm_noauthpriv", snmp_v3_usm_noauthpriv },
|
||||
{ "transport_tcp_get", transport_tcp_get },
|
||||
{ "transport_tcp_disconnect", transport_tcp_disconnect },
|
||||
{ "transport_tcp_double_get_disconnect", transport_tcp_double_get_disconnect },
|
||||
{ NULL, NULL }
|
||||
};
|
||||
|
||||
|
150
regress/usr.sbin/snmpd/transport.c
Normal file
150
regress/usr.sbin/snmpd/transport.c
Normal file
@ -0,0 +1,150 @@
|
||||
#include <sys/socket.h>
|
||||
|
||||
#include <ber.h>
|
||||
#include <err.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "regress.h"
|
||||
|
||||
#define MIB_SUBAGENT_TRANSPORT_TCP MIB_SUBAGENT_TRANSPORT, 1
|
||||
#define MIB_TRANSPORT_TCP MIB_TRANSPORT, 1
|
||||
|
||||
void
|
||||
transport_tcp_get(void)
|
||||
{
|
||||
struct sockaddr_storage ss;
|
||||
struct sockaddr *sa = (struct sockaddr *)&ss;
|
||||
socklen_t salen;
|
||||
int snmp_s, ax_s;
|
||||
uint32_t sessionid;
|
||||
struct varbind varbind = {
|
||||
.type = TYPE_NULL,
|
||||
.name = OID_STRUCT(MIB_TRANSPORT_TCP, 1, 0),
|
||||
.data.int32 = 1
|
||||
};
|
||||
int32_t requestid;
|
||||
char buf[1024];
|
||||
size_t n;
|
||||
|
||||
ax_s = agentx_connect(axsocket);
|
||||
sessionid = agentx_open(ax_s, 0, 0,
|
||||
OID_ARG(MIB_SUBAGENT_TRANSPORT_TCP, 1), __func__);
|
||||
agentx_register(ax_s, sessionid, 0, 0, 127, 0,
|
||||
OID_ARG(MIB_TRANSPORT_TCP, 1), 0);
|
||||
|
||||
salen = snmp_resolve(SOCK_STREAM, hostname, servname, sa);
|
||||
snmp_s = snmp_connect(SOCK_STREAM, sa, salen);
|
||||
requestid = snmpv2_get(snmp_s, community, 0, &varbind, 1);
|
||||
|
||||
n = agentx_read(ax_s, buf, sizeof(buf), 1000);
|
||||
agentx_get_handle(__func__, buf, n, 0, sessionid, &varbind, 1);
|
||||
|
||||
varbind.type = TYPE_INTEGER;
|
||||
agentx_response(ax_s, buf, NOERROR, 0, &varbind, 1);
|
||||
|
||||
snmpv2_response_validate(snmp_s, 1000, community, requestid, 0, 0,
|
||||
&varbind, 1);
|
||||
}
|
||||
|
||||
void
|
||||
transport_tcp_disconnect(void)
|
||||
{
|
||||
struct sockaddr_storage ss;
|
||||
struct sockaddr *sa = (struct sockaddr *)&ss;
|
||||
socklen_t salen;
|
||||
int snmp_s, ax_s;
|
||||
uint32_t sessionid;
|
||||
struct varbind varbind = {
|
||||
.type = TYPE_NULL,
|
||||
.name = OID_STRUCT(MIB_TRANSPORT_TCP, 2, 0),
|
||||
.data.int32 = 1
|
||||
};
|
||||
int32_t requestid;
|
||||
char buf[1024];
|
||||
size_t n;
|
||||
|
||||
ax_s = agentx_connect(axsocket);
|
||||
sessionid = agentx_open(ax_s, 0, 0,
|
||||
OID_ARG(MIB_SUBAGENT_TRANSPORT_TCP, 2), __func__);
|
||||
agentx_register(ax_s, sessionid, 0, 0, 127, 0,
|
||||
OID_ARG(MIB_TRANSPORT_TCP, 2), 0);
|
||||
|
||||
salen = snmp_resolve(SOCK_STREAM, hostname, servname, sa);
|
||||
snmp_s = snmp_connect(SOCK_STREAM, sa, salen);
|
||||
requestid = snmpv2_get(snmp_s, community, 0, &varbind, 1);
|
||||
|
||||
close(snmp_s);
|
||||
|
||||
n = agentx_read(ax_s, buf, sizeof(buf), 1000);
|
||||
agentx_get_handle(__func__, buf, n, 0, sessionid, &varbind, 1);
|
||||
|
||||
varbind.type = TYPE_INTEGER;
|
||||
agentx_response(ax_s, buf, NOERROR, 0, &varbind, 1);
|
||||
}
|
||||
|
||||
void
|
||||
transport_tcp_double_get_disconnect(void)
|
||||
{
|
||||
struct sockaddr_storage ss;
|
||||
struct sockaddr *sa = (struct sockaddr *)&ss;
|
||||
socklen_t salen;
|
||||
int snmp_s, ax_s;
|
||||
uint32_t sessionid;
|
||||
struct varbind varbind = {
|
||||
.type = TYPE_NULL,
|
||||
.name = OID_STRUCT(MIB_TRANSPORT_TCP, 2, 0),
|
||||
.data.int32 = 1
|
||||
};
|
||||
struct ber_element *message;
|
||||
struct ber ber = {};
|
||||
char buf[1024];
|
||||
ssize_t buflen, writelen;
|
||||
void *ptr;
|
||||
size_t n;
|
||||
|
||||
ax_s = agentx_connect(axsocket);
|
||||
sessionid = agentx_open(ax_s, 0, 0,
|
||||
OID_ARG(MIB_SUBAGENT_TRANSPORT_TCP, 2), __func__);
|
||||
agentx_register(ax_s, sessionid, 0, 0, 127, 0,
|
||||
OID_ARG(MIB_TRANSPORT_TCP, 2), 0);
|
||||
|
||||
salen = snmp_resolve(SOCK_STREAM, hostname, servname, sa);
|
||||
snmp_s = snmp_connect(SOCK_STREAM, sa, salen);
|
||||
|
||||
message = snmpv2_build(community, REQUEST_GET, 0, 0, 0, &varbind, 1);
|
||||
|
||||
if (ober_write_elements(&ber, message) == -1)
|
||||
err(1, "ober_write_elements");
|
||||
|
||||
buflen = ober_get_writebuf(&ber, &ptr);
|
||||
/* send two copies in a single window */
|
||||
memcpy(buf, ptr, buflen);
|
||||
memcpy(buf + buflen, ptr, buflen);
|
||||
|
||||
if ((writelen = write(snmp_s, buf, buflen * 2)) == -1)
|
||||
err(1, "write");
|
||||
if (writelen != buflen * 2)
|
||||
errx(1, "write: short write");
|
||||
|
||||
if (verbose) {
|
||||
printf("SNMP send(%d):\n", snmp_s);
|
||||
smi_debug_elements(message);
|
||||
}
|
||||
ober_free_elements(message);
|
||||
ober_free(&ber);
|
||||
|
||||
close(snmp_s);
|
||||
|
||||
n = agentx_read(ax_s, buf, sizeof(buf), 1000);
|
||||
agentx_get_handle(__func__, buf, n, 0, sessionid, &varbind, 1);
|
||||
|
||||
varbind.type = TYPE_INTEGER;
|
||||
agentx_response(ax_s, buf, NOERROR, 0, &varbind, 1);
|
||||
|
||||
n = agentx_read(ax_s, buf, sizeof(buf), 1000);
|
||||
agentx_get_handle(__func__, buf, n, 0, sessionid, &varbind, 1);
|
||||
agentx_response(ax_s, buf, NOERROR, 0, &varbind, 1);
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: if_dwge.c,v 1.20 2023/11/10 15:51:19 bluhm Exp $ */
|
||||
/* $OpenBSD: if_dwge.c,v 1.21 2023/11/20 20:41:18 kettenis Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2008, 2019 Mark Kettenis <kettenis@openbsd.org>
|
||||
* Copyright (c) 2017 Patrick Wildt <patrick@blueri.se>
|
||||
@ -214,6 +214,7 @@ struct dwge_desc {
|
||||
#define RDES0_OE (1 << 11)
|
||||
#define RDES0_SAF (1 << 13)
|
||||
#define RDES0_DE (1 << 14)
|
||||
#define RDES0_ES (1 << 15)
|
||||
#define RDES0_FL_MASK 0x3fff
|
||||
#define RDES0_FL_SHIFT 16
|
||||
#define RDES0_AFM (1 << 30)
|
||||
@ -1097,15 +1098,20 @@ dwge_rx_proc(struct dwge_softc *sc)
|
||||
len, BUS_DMASYNC_POSTREAD);
|
||||
bus_dmamap_unload(sc->sc_dmat, rxb->tb_map);
|
||||
|
||||
/* Strip off CRC. */
|
||||
len -= ETHER_CRC_LEN;
|
||||
KASSERT(len > 0);
|
||||
|
||||
m = rxb->tb_m;
|
||||
rxb->tb_m = NULL;
|
||||
m->m_pkthdr.len = m->m_len = len;
|
||||
if (rxd->sd_status & RDES0_ES) {
|
||||
ifp->if_ierrors++;
|
||||
m_freem(m);
|
||||
} else {
|
||||
/* Strip off CRC. */
|
||||
len -= ETHER_CRC_LEN;
|
||||
KASSERT(len > 0);
|
||||
|
||||
ml_enqueue(&ml, m);
|
||||
m->m_pkthdr.len = m->m_len = len;
|
||||
|
||||
ml_enqueue(&ml, m);
|
||||
}
|
||||
|
||||
put++;
|
||||
if (sc->sc_rx_cons == (DWGE_NRXDESC - 1))
|
||||
|
@ -197,18 +197,18 @@ static const struct pci_matchid amdgpu_devices[] = {
|
||||
*/
|
||||
|
||||
/* GC 10.3.6, DCN 3.1.5, APU, Ryzen 7000 "Raphael" */
|
||||
{0x1002, 0x164e },
|
||||
{0x1002, 0x164e }, /* Radeon 610M */
|
||||
|
||||
/* GC 10.3.7, DCN 3.1.6, APU, Ryzen 7020 "Mendocino" */
|
||||
{0x1002, 0x1506 },
|
||||
{0x1002, 0x1506 }, /* Radeon 610M */
|
||||
|
||||
/* GC 11.0.0, DCN 3.2.0, dGPU, "Navi 31" */
|
||||
{0x1002, 0x7448 }, /* Radeon Pro W7900 */
|
||||
{0x1002, 0x744c }, /* Radeon RX 7900 XT/XTX/GRE */
|
||||
{0x1002, 0x744c }, /* Radeon RX 7900 XT/XTX/GRE, 7900M */
|
||||
{0x1002, 0x745e }, /* Radeon Pro W7800 */
|
||||
|
||||
/* GC 11.0.1, DCN 3.1.4, APU, Ryzen 7040 "Phoenix" */
|
||||
{0x1002, 0x15bf },
|
||||
{0x1002, 0x15bf }, /* Radeon 740M / 760M / 780M */
|
||||
|
||||
/* GC 11.0.2, DCN 3.2.1, dGPU, "Navi 33" */
|
||||
{0x1002, 0x7480 }, /* Radeon RX 7600S, 7700S, 7600M XT,
|
||||
@ -221,7 +221,7 @@ static const struct pci_matchid amdgpu_devices[] = {
|
||||
{0x1002, 0x747e }, /* Radeon RX 7700 XT, 7800 XT */
|
||||
|
||||
/* GC 11.0.4, DCN 3.1.4, APU, "Phoenix 2" */
|
||||
{0x1002, 0x15c8 },
|
||||
{0x1002, 0x15c8 }, /* Radeon 740M */
|
||||
|
||||
/* GC 11.5.0, DCN 3.5.0, APU, linux >= 6.7 */
|
||||
};
|
||||
|
@ -487,11 +487,11 @@ svm_range_validate_svm_bo(struct amdgpu_device *adev, struct svm_range *prange)
|
||||
|
||||
/* We need a new svm_bo. Spin-loop to wait for concurrent
|
||||
* svm_range_bo_release to finish removing this range from
|
||||
* its range list. After this, it is safe to reuse the
|
||||
* svm_bo pointer and svm_bo_list head.
|
||||
* its range list and set prange->svm_bo to null. After this,
|
||||
* it is safe to reuse the svm_bo pointer and svm_bo_list head.
|
||||
*/
|
||||
while (!list_empty_careful(&prange->svm_bo_list))
|
||||
;
|
||||
while (!list_empty_careful(&prange->svm_bo_list) || prange->svm_bo)
|
||||
cond_resched();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
@ -9630,16 +9630,27 @@ static void dm_get_oriented_plane_size(struct drm_plane_state *plane_state,
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
dm_get_plane_scale(struct drm_plane_state *plane_state,
|
||||
int *out_plane_scale_w, int *out_plane_scale_h)
|
||||
{
|
||||
int plane_src_w, plane_src_h;
|
||||
|
||||
dm_get_oriented_plane_size(plane_state, &plane_src_w, &plane_src_h);
|
||||
*out_plane_scale_w = plane_state->crtc_w * 1000 / plane_src_w;
|
||||
*out_plane_scale_h = plane_state->crtc_h * 1000 / plane_src_h;
|
||||
}
|
||||
|
||||
static int dm_check_crtc_cursor(struct drm_atomic_state *state,
|
||||
struct drm_crtc *crtc,
|
||||
struct drm_crtc_state *new_crtc_state)
|
||||
{
|
||||
struct drm_plane *cursor = crtc->cursor, *underlying;
|
||||
struct drm_plane *cursor = crtc->cursor, *plane, *underlying;
|
||||
struct drm_plane_state *old_plane_state, *new_plane_state;
|
||||
struct drm_plane_state *new_cursor_state, *new_underlying_state;
|
||||
int i;
|
||||
int cursor_scale_w, cursor_scale_h, underlying_scale_w, underlying_scale_h;
|
||||
int cursor_src_w, cursor_src_h;
|
||||
int underlying_src_w, underlying_src_h;
|
||||
bool any_relevant_change = false;
|
||||
|
||||
/* On DCE and DCN there is no dedicated hardware cursor plane. We get a
|
||||
* cursor per pipe but it's going to inherit the scaling and
|
||||
@ -9647,13 +9658,50 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,
|
||||
* blending properties match the underlying planes'.
|
||||
*/
|
||||
|
||||
new_cursor_state = drm_atomic_get_new_plane_state(state, cursor);
|
||||
if (!new_cursor_state || !new_cursor_state->fb)
|
||||
/* If no plane was enabled or changed scaling, no need to check again */
|
||||
for_each_oldnew_plane_in_state(state, plane, old_plane_state, new_plane_state, i) {
|
||||
int new_scale_w, new_scale_h, old_scale_w, old_scale_h;
|
||||
|
||||
if (!new_plane_state || !new_plane_state->fb || new_plane_state->crtc != crtc)
|
||||
continue;
|
||||
|
||||
if (!old_plane_state || !old_plane_state->fb || old_plane_state->crtc != crtc) {
|
||||
any_relevant_change = true;
|
||||
break;
|
||||
}
|
||||
|
||||
if (new_plane_state->fb == old_plane_state->fb &&
|
||||
new_plane_state->crtc_w == old_plane_state->crtc_w &&
|
||||
new_plane_state->crtc_h == old_plane_state->crtc_h)
|
||||
continue;
|
||||
|
||||
dm_get_plane_scale(new_plane_state, &new_scale_w, &new_scale_h);
|
||||
dm_get_plane_scale(old_plane_state, &old_scale_w, &old_scale_h);
|
||||
|
||||
if (new_scale_w != old_scale_w || new_scale_h != old_scale_h) {
|
||||
any_relevant_change = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!any_relevant_change)
|
||||
return 0;
|
||||
|
||||
dm_get_oriented_plane_size(new_cursor_state, &cursor_src_w, &cursor_src_h);
|
||||
cursor_scale_w = new_cursor_state->crtc_w * 1000 / cursor_src_w;
|
||||
cursor_scale_h = new_cursor_state->crtc_h * 1000 / cursor_src_h;
|
||||
new_cursor_state = drm_atomic_get_plane_state(state, cursor);
|
||||
if (IS_ERR(new_cursor_state))
|
||||
return PTR_ERR(new_cursor_state);
|
||||
|
||||
if (!new_cursor_state->fb)
|
||||
return 0;
|
||||
|
||||
dm_get_plane_scale(new_cursor_state, &cursor_scale_w, &cursor_scale_h);
|
||||
|
||||
/* Need to check all enabled planes, even if this commit doesn't change
|
||||
* their state
|
||||
*/
|
||||
i = drm_atomic_add_affected_planes(state, crtc);
|
||||
if (i)
|
||||
return i;
|
||||
|
||||
for_each_new_plane_in_state_reverse(state, underlying, new_underlying_state, i) {
|
||||
/* Narrow down to non-cursor planes on the same CRTC as the cursor */
|
||||
@ -9664,10 +9712,8 @@ static int dm_check_crtc_cursor(struct drm_atomic_state *state,
|
||||
if (!new_underlying_state->fb)
|
||||
continue;
|
||||
|
||||
dm_get_oriented_plane_size(new_underlying_state,
|
||||
&underlying_src_w, &underlying_src_h);
|
||||
underlying_scale_w = new_underlying_state->crtc_w * 1000 / underlying_src_w;
|
||||
underlying_scale_h = new_underlying_state->crtc_h * 1000 / underlying_src_h;
|
||||
dm_get_plane_scale(new_underlying_state,
|
||||
&underlying_scale_w, &underlying_scale_h);
|
||||
|
||||
if (cursor_scale_w != underlying_scale_w ||
|
||||
cursor_scale_h != underlying_scale_h) {
|
||||
|
@ -1078,7 +1078,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,
|
||||
fence = drm_syncobj_fence_get(syncobjs[i]);
|
||||
if (!fence || dma_fence_chain_find_seqno(&fence, points[i])) {
|
||||
dma_fence_put(fence);
|
||||
if (flags & DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT) {
|
||||
if (flags & (DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT |
|
||||
DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE)) {
|
||||
continue;
|
||||
} else {
|
||||
timeout = -EINVAL;
|
||||
|
@ -4823,14 +4823,15 @@ restart_ih:
|
||||
break;
|
||||
case 44: /* hdmi */
|
||||
afmt_idx = src_data;
|
||||
if (!(afmt_status[afmt_idx] & AFMT_AZ_FORMAT_WTRIG))
|
||||
DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
|
||||
|
||||
if (afmt_idx > 5) {
|
||||
DRM_ERROR("Unhandled interrupt: %d %d\n",
|
||||
src_id, src_data);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(afmt_status[afmt_idx] & AFMT_AZ_FORMAT_WTRIG))
|
||||
DRM_DEBUG("IH: IH event w/o asserted irq bit?\n");
|
||||
|
||||
afmt_status[afmt_idx] &= ~AFMT_AZ_FORMAT_WTRIG;
|
||||
queue_hdmi = true;
|
||||
DRM_DEBUG("IH: HDMI%d\n", afmt_idx + 1);
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $OpenBSD: Makefile,v 1.37 2020/06/22 01:02:30 dlg Exp $
|
||||
# $OpenBSD: Makefile,v 1.39 2023/11/20 17:48:27 kn Exp $
|
||||
|
||||
LDSTATIC=${STATIC}
|
||||
PROG= kdump
|
||||
@ -10,16 +10,17 @@ CLEANFILES+=ioctl.c kdump_subr.c
|
||||
|
||||
ioctl.c: ${.CURDIR}/Makefile ${.CURDIR}/mkioctls
|
||||
CC="${CC}" \
|
||||
/bin/sh ${.CURDIR}/mkioctls ${SYS_DIR}/sys/ioctl.h \
|
||||
/bin/sh ${.CURDIR}/mkioctls \
|
||||
${SYS_DIR}/dev/biovar.h \
|
||||
${SYS_DIR}/dev/efi/efiio.h \
|
||||
${SYS_DIR}/dev/ipmi.h \
|
||||
${SYS_DIR}/dev/wscons/wsconsio.h \
|
||||
${SYS_DIR}/dev/vndioctl.h \
|
||||
${SYS_DIR}/dev/vscsivar.h \
|
||||
${SYS_DIR}/dev/pci/drm/include/uapi/drm/i915_drm.h \
|
||||
${SYS_DIR}/dev/pv/pvvar.h \
|
||||
${SYS_DIR}/dev/usb/udlio.h \
|
||||
${SYS_DIR}/dev/usb/usb.h \
|
||||
${SYS_DIR}/dev/vndioctl.h \
|
||||
${SYS_DIR}/dev/vscsivar.h \
|
||||
${SYS_DIR}/dev/wscons/wsconsio.h \
|
||||
${SYS_DIR}/miscfs/fuse/fusefs.h \
|
||||
${SYS_DIR}/net/bpf.h \
|
||||
${SYS_DIR}/net/if_ppp.h \
|
||||
@ -31,8 +32,6 @@ ioctl.c: ${.CURDIR}/Makefile ${.CURDIR}/mkioctls
|
||||
${SYS_DIR}/net/pipex.h \
|
||||
${SYS_DIR}/net80211/ieee80211_ioctl.h \
|
||||
${SYS_DIR}/netinet6/in6_var.h \
|
||||
${SYS_DIR}/sys/tty.h \
|
||||
${SYS_DIR}/sys/syslog.h \
|
||||
${SYS_DIR}/sys/ataio.h \
|
||||
${SYS_DIR}/sys/audioio.h \
|
||||
${SYS_DIR}/sys/cdio.h \
|
||||
@ -40,6 +39,7 @@ ioctl.c: ${.CURDIR}/Makefile ${.CURDIR}/mkioctls
|
||||
${SYS_DIR}/sys/dkio.h \
|
||||
${SYS_DIR}/sys/filio.h \
|
||||
${SYS_DIR}/sys/gpio.h \
|
||||
${SYS_DIR}/sys/ioctl.h \
|
||||
${SYS_DIR}/sys/kcov.h \
|
||||
${SYS_DIR}/sys/memrange.h \
|
||||
${SYS_DIR}/sys/mtio.h \
|
||||
@ -47,6 +47,8 @@ ioctl.c: ${.CURDIR}/Makefile ${.CURDIR}/mkioctls
|
||||
${SYS_DIR}/sys/radioio.h \
|
||||
${SYS_DIR}/sys/scsiio.h \
|
||||
${SYS_DIR}/sys/sockio.h \
|
||||
${SYS_DIR}/sys/syslog.h \
|
||||
${SYS_DIR}/sys/tty.h \
|
||||
${SYS_DIR}/sys/videoio.h \
|
||||
> ioctl.c
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
#!/bin/sh -
|
||||
# $OpenBSD: mkioctls,v 1.43 2021/09/17 15:13:04 deraadt Exp $
|
||||
# $OpenBSD: mkioctls,v 1.45 2023/11/20 17:48:27 kn Exp $
|
||||
|
||||
#
|
||||
# Copyright (c) 1994
|
||||
@ -79,16 +79,17 @@ BEGIN {
|
||||
print "#include <sys/tty.h>"
|
||||
print "#include <sys/syslog.h>"
|
||||
print "#include <sys/videoio.h>"
|
||||
print "#include <dev/biovar.h>"
|
||||
print "#include <dev/ipmi.h>"
|
||||
print "#include <dev/wscons/wsconsio.h>"
|
||||
print "#include <dev/vndioctl.h>"
|
||||
print "#include <scsi/scsi_all.h>"
|
||||
print "#include <dev/vscsivar.h>"
|
||||
print "#include <dev/biovar.h>"
|
||||
print "#include <dev/efi/efiio.h>"
|
||||
print "#include <dev/ipmi.h>"
|
||||
print "#include <dev/pci/drm/include/uapi/drm/i915_drm.h>"
|
||||
print "#include <dev/pv/pvvar.h>"
|
||||
print "#include <dev/usb/udlio.h>"
|
||||
print "#include <dev/usb/usb.h>"
|
||||
print "#include <dev/vndioctl.h>"
|
||||
print "#include <dev/vscsivar.h>"
|
||||
print "#include <dev/wscons/wsconsio.h>"
|
||||
print "#include <sys/ioctl.h>"
|
||||
print "#include \"kdump.h\""
|
||||
print ""
|
||||
@ -99,7 +100,7 @@ BEGIN {
|
||||
print ""
|
||||
}
|
||||
|
||||
/^[ ]*#[ ]*define[ ]+(ATAIO|AUDIO_|BIOC|CDIO|CHIO|DIOC|DRM|GPIO|IPMICTL|TIO|FIO|KIO|MEMRANGE|MTIOC|LIOC|SIO|OSIO|SESIOC_|SIOC|PCIOC|PIPEX|PPPIOC|PPPOE|PVBUSIOC|RIOC|RND|STRIOC|SCIOC|OSCIOC|TUN|UDLIO|USB|VIDIOC|VNDIOC|VSCSI|WSKBD|WSMOUSE|WSDISPLAY|WSMUX|PTM)[A-Z_0-9]*[ ]+(DRM)?_IO/ {
|
||||
/^[ ]*#[ ]*define[ ]+(ATAIO|AUDIO_|BIOC|CDIO|CHIO|DIOC|DRM|EFI|GPIO|IPMICTL|TIO|FIO|KIO|MEMRANGE|MTIOC|LIOC|SIO|OSIO|SESIOC_|SIOC|PCIOC|PIPEX|PPPIOC|PPPOE|PVBUSIOC|RIOC|RND|STRIOC|SCIOC|OSCIOC|TUN|UDLIO|USB|VIDIOC|VNDIOC|VSCSI|WSKBD|WSMOUSE|WSDISPLAY|WSMUX|PTM)[A-Z_0-9]*[ ]+(DRM)?_IO/ {
|
||||
|
||||
# find where the name starts
|
||||
for (i = 1; i <= NF; i++)
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: sshconnect.c,v 1.364 2023/11/15 23:03:38 djm Exp $ */
|
||||
/* $OpenBSD: sshconnect.c,v 1.365 2023/11/20 02:50:00 djm Exp $ */
|
||||
/*
|
||||
* Author: Tatu Ylonen <ylo@cs.hut.fi>
|
||||
* Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
|
||||
@ -463,7 +463,7 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
|
||||
ai->ai_family != options.address_family) {
|
||||
debug2_f("skipping address [%s]:%s: "
|
||||
"wrong address family", ntop, strport);
|
||||
errno = 0;
|
||||
errno = EAFNOSUPPORT;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: bgpctl.c,v 1.296 2023/09/06 09:52:26 claudio Exp $ */
|
||||
/* $OpenBSD: bgpctl.c,v 1.298 2023/11/20 14:41:55 claudio Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
|
||||
@ -60,7 +60,7 @@ void network_bulk(struct parse_result *);
|
||||
int match_aspath(void *, uint16_t, struct filter_as *);
|
||||
struct flowspec *res_to_flowspec(struct parse_result *);
|
||||
|
||||
struct imsgbuf *ibuf;
|
||||
struct imsgbuf *imsgbuf;
|
||||
struct mrt_parser show_mrt = { show_mrt_dump, show_mrt_state, show_mrt_msg };
|
||||
struct mrt_parser net_mrt = { network_mrt_dump, NULL, NULL };
|
||||
const struct output *output = &show_output;
|
||||
@ -174,9 +174,9 @@ main(int argc, char *argv[])
|
||||
if (pledge("stdio", NULL) == -1)
|
||||
err(1, "pledge");
|
||||
|
||||
if ((ibuf = malloc(sizeof(struct imsgbuf))) == NULL)
|
||||
if ((imsgbuf = malloc(sizeof(struct imsgbuf))) == NULL)
|
||||
err(1, NULL);
|
||||
imsg_init(ibuf, fd);
|
||||
imsg_init(imsgbuf, fd);
|
||||
done = 0;
|
||||
|
||||
switch (res->action) {
|
||||
@ -186,10 +186,11 @@ main(int argc, char *argv[])
|
||||
/* NOTREACHED */
|
||||
case SHOW:
|
||||
case SHOW_SUMMARY:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1,
|
||||
NULL, 0);
|
||||
break;
|
||||
case SHOW_SUMMARY_TERSE:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_TERSE, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_TERSE, 0, 0, -1, NULL, 0);
|
||||
break;
|
||||
case SHOW_FIB:
|
||||
if (!res->addr.aid) {
|
||||
@ -197,7 +198,7 @@ main(int argc, char *argv[])
|
||||
sa_family_t af;
|
||||
|
||||
af = aid2af(res->aid);
|
||||
if ((msg = imsg_create(ibuf, IMSG_CTL_KROUTE,
|
||||
if ((msg = imsg_create(imsgbuf, IMSG_CTL_KROUTE,
|
||||
res->rtableid, 0, sizeof(res->flags) +
|
||||
sizeof(af))) == NULL)
|
||||
errx(1, "imsg_create failure");
|
||||
@ -205,36 +206,39 @@ main(int argc, char *argv[])
|
||||
-1 ||
|
||||
imsg_add(msg, &af, sizeof(af)) == -1)
|
||||
errx(1, "imsg_add failure");
|
||||
imsg_close(ibuf, msg);
|
||||
imsg_close(imsgbuf, msg);
|
||||
} else
|
||||
imsg_compose(ibuf, IMSG_CTL_KROUTE_ADDR, res->rtableid,
|
||||
0, -1, &res->addr, sizeof(res->addr));
|
||||
imsg_compose(imsgbuf, IMSG_CTL_KROUTE_ADDR,
|
||||
res->rtableid, 0, -1,
|
||||
&res->addr, sizeof(res->addr));
|
||||
break;
|
||||
case SHOW_FIB_TABLES:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_FIB_TABLES, 0, 0, -1, NULL, 0);
|
||||
break;
|
||||
case SHOW_NEXTHOP:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_NEXTHOP, res->rtableid, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_FIB_TABLES, 0, 0, -1,
|
||||
NULL, 0);
|
||||
break;
|
||||
case SHOW_NEXTHOP:
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_NEXTHOP, res->rtableid,
|
||||
0, -1, NULL, 0);
|
||||
break;
|
||||
case SHOW_INTERFACE:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_INTERFACE, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_INTERFACE, 0, 0, -1,
|
||||
NULL, 0);
|
||||
break;
|
||||
case SHOW_SET:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_SET, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_SET, 0, 0, -1, NULL, 0);
|
||||
break;
|
||||
case SHOW_RTR:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_RTR, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_RTR, 0, 0, -1, NULL, 0);
|
||||
break;
|
||||
case SHOW_NEIGHBOR:
|
||||
case SHOW_NEIGHBOR_TIMERS:
|
||||
case SHOW_NEIGHBOR_TERSE:
|
||||
neighbor.show_timers = (res->action == SHOW_NEIGHBOR_TIMERS);
|
||||
if (res->peeraddr.aid || res->peerdesc[0])
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1,
|
||||
&neighbor, sizeof(neighbor));
|
||||
else
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1,
|
||||
NULL, 0);
|
||||
break;
|
||||
case SHOW_RIB:
|
||||
@ -254,19 +258,20 @@ main(int argc, char *argv[])
|
||||
ribreq.aid = res->aid;
|
||||
ribreq.path_id = res->pathid;
|
||||
ribreq.flags = res->flags;
|
||||
imsg_compose(ibuf, type, 0, 0, -1, &ribreq, sizeof(ribreq));
|
||||
imsg_compose(imsgbuf, type, 0, 0, -1, &ribreq, sizeof(ribreq));
|
||||
break;
|
||||
case SHOW_RIB_MEM:
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_RIB_MEM, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_RIB_MEM, 0, 0, -1, NULL, 0);
|
||||
break;
|
||||
case SHOW_METRICS:
|
||||
output = &ometric_output;
|
||||
numdone = 2;
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_RIB_MEM, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1,
|
||||
NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_RIB_MEM, 0, 0, -1, NULL, 0);
|
||||
break;
|
||||
case RELOAD:
|
||||
imsg_compose(ibuf, IMSG_CTL_RELOAD, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_RELOAD, 0, 0, -1,
|
||||
res->reason, sizeof(res->reason));
|
||||
if (res->reason[0])
|
||||
printf("reload request sent: %s\n", res->reason);
|
||||
@ -277,14 +282,14 @@ main(int argc, char *argv[])
|
||||
errx(1, "action==FIB");
|
||||
break;
|
||||
case FIB_COUPLE:
|
||||
imsg_compose(ibuf, IMSG_CTL_FIB_COUPLE, res->rtableid, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_FIB_COUPLE, res->rtableid, 0, -1,
|
||||
NULL, 0);
|
||||
printf("couple request sent.\n");
|
||||
done = 1;
|
||||
break;
|
||||
case FIB_DECOUPLE:
|
||||
imsg_compose(ibuf, IMSG_CTL_FIB_DECOUPLE, res->rtableid, 0, -1,
|
||||
NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_CTL_FIB_DECOUPLE, res->rtableid,
|
||||
0, -1, NULL, 0);
|
||||
printf("decouple request sent.\n");
|
||||
done = 1;
|
||||
break;
|
||||
@ -292,23 +297,23 @@ main(int argc, char *argv[])
|
||||
errx(1, "action==NEIGHBOR");
|
||||
break;
|
||||
case NEIGHBOR_UP:
|
||||
imsg_compose(ibuf, IMSG_CTL_NEIGHBOR_UP, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_NEIGHBOR_UP, 0, 0, -1,
|
||||
&neighbor, sizeof(neighbor));
|
||||
break;
|
||||
case NEIGHBOR_DOWN:
|
||||
imsg_compose(ibuf, IMSG_CTL_NEIGHBOR_DOWN, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_NEIGHBOR_DOWN, 0, 0, -1,
|
||||
&neighbor, sizeof(neighbor));
|
||||
break;
|
||||
case NEIGHBOR_CLEAR:
|
||||
imsg_compose(ibuf, IMSG_CTL_NEIGHBOR_CLEAR, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_NEIGHBOR_CLEAR, 0, 0, -1,
|
||||
&neighbor, sizeof(neighbor));
|
||||
break;
|
||||
case NEIGHBOR_RREFRESH:
|
||||
imsg_compose(ibuf, IMSG_CTL_NEIGHBOR_RREFRESH, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_NEIGHBOR_RREFRESH, 0, 0, -1,
|
||||
&neighbor, sizeof(neighbor));
|
||||
break;
|
||||
case NEIGHBOR_DESTROY:
|
||||
imsg_compose(ibuf, IMSG_CTL_NEIGHBOR_DESTROY, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_NEIGHBOR_DESTROY, 0, 0, -1,
|
||||
&neighbor, sizeof(neighbor));
|
||||
break;
|
||||
case NETWORK_BULK_ADD:
|
||||
@ -325,19 +330,19 @@ main(int argc, char *argv[])
|
||||
net.rd = res->rd;
|
||||
/* attribute sets are not supported */
|
||||
if (res->action == NETWORK_ADD) {
|
||||
imsg_compose(ibuf, IMSG_NETWORK_ADD, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_ADD, 0, 0, -1,
|
||||
&net, sizeof(net));
|
||||
send_filterset(ibuf, &res->set);
|
||||
imsg_compose(ibuf, IMSG_NETWORK_DONE, 0, 0, -1,
|
||||
send_filterset(imsgbuf, &res->set);
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_DONE, 0, 0, -1,
|
||||
NULL, 0);
|
||||
} else
|
||||
imsg_compose(ibuf, IMSG_NETWORK_REMOVE, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_REMOVE, 0, 0, -1,
|
||||
&net, sizeof(net));
|
||||
printf("request sent.\n");
|
||||
done = 1;
|
||||
break;
|
||||
case NETWORK_FLUSH:
|
||||
imsg_compose(ibuf, IMSG_NETWORK_FLUSH, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_FLUSH, 0, 0, -1, NULL, 0);
|
||||
printf("request sent.\n");
|
||||
done = 1;
|
||||
break;
|
||||
@ -345,7 +350,7 @@ main(int argc, char *argv[])
|
||||
memset(&ribreq, 0, sizeof(ribreq));
|
||||
ribreq.aid = res->aid;
|
||||
strlcpy(ribreq.rib, res->rib, sizeof(ribreq.rib));
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_NETWORK, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_NETWORK, 0, 0, -1,
|
||||
&ribreq, sizeof(ribreq));
|
||||
break;
|
||||
case NETWORK_MRT:
|
||||
@ -369,19 +374,19 @@ main(int argc, char *argv[])
|
||||
f = res_to_flowspec(res);
|
||||
/* attribute sets are not supported */
|
||||
if (res->action == FLOWSPEC_ADD) {
|
||||
imsg_compose(ibuf, IMSG_FLOWSPEC_ADD, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_FLOWSPEC_ADD, 0, 0, -1,
|
||||
f, FLOWSPEC_SIZE + f->len);
|
||||
send_filterset(ibuf, &res->set);
|
||||
imsg_compose(ibuf, IMSG_FLOWSPEC_DONE, 0, 0, -1,
|
||||
send_filterset(imsgbuf, &res->set);
|
||||
imsg_compose(imsgbuf, IMSG_FLOWSPEC_DONE, 0, 0, -1,
|
||||
NULL, 0);
|
||||
} else
|
||||
imsg_compose(ibuf, IMSG_FLOWSPEC_REMOVE, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_FLOWSPEC_REMOVE, 0, 0, -1,
|
||||
f, FLOWSPEC_SIZE + f->len);
|
||||
printf("request sent.\n");
|
||||
done = 1;
|
||||
break;
|
||||
case FLOWSPEC_FLUSH:
|
||||
imsg_compose(ibuf, IMSG_FLOWSPEC_FLUSH, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_FLOWSPEC_FLUSH, 0, 0, -1, NULL, 0);
|
||||
printf("request sent.\n");
|
||||
done = 1;
|
||||
break;
|
||||
@ -402,14 +407,14 @@ main(int argc, char *argv[])
|
||||
aid2str(res->aid));
|
||||
}
|
||||
strlcpy(ribreq.rib, res->rib, sizeof(ribreq.rib));
|
||||
imsg_compose(ibuf, IMSG_CTL_SHOW_FLOWSPEC, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_SHOW_FLOWSPEC, 0, 0, -1,
|
||||
&ribreq, sizeof(ribreq));
|
||||
break;
|
||||
case LOG_VERBOSE:
|
||||
verbose = 1;
|
||||
/* FALLTHROUGH */
|
||||
case LOG_BRIEF:
|
||||
imsg_compose(ibuf, IMSG_CTL_LOG_VERBOSE, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_CTL_LOG_VERBOSE, 0, 0, -1,
|
||||
&verbose, sizeof(verbose));
|
||||
printf("logging request sent.\n");
|
||||
done = 1;
|
||||
@ -419,13 +424,13 @@ main(int argc, char *argv[])
|
||||
output->head(res);
|
||||
|
||||
again:
|
||||
while (ibuf->w.queued)
|
||||
if (msgbuf_write(&ibuf->w) <= 0)
|
||||
while (imsgbuf->w.queued)
|
||||
if (msgbuf_write(&imsgbuf->w) <= 0)
|
||||
err(1, "write error");
|
||||
|
||||
while (!done) {
|
||||
while (!done) {
|
||||
if ((n = imsg_get(ibuf, &imsg)) == -1)
|
||||
if ((n = imsg_get(imsgbuf, &imsg)) == -1)
|
||||
err(1, "imsg_get error");
|
||||
if (n == 0)
|
||||
break;
|
||||
@ -437,7 +442,7 @@ main(int argc, char *argv[])
|
||||
if (done)
|
||||
break;
|
||||
|
||||
if ((n = imsg_read(ibuf)) == -1)
|
||||
if ((n = imsg_read(imsgbuf)) == -1)
|
||||
err(1, "imsg_read error");
|
||||
if (n == 0)
|
||||
errx(1, "pipe closed");
|
||||
@ -452,7 +457,7 @@ main(int argc, char *argv[])
|
||||
output->tail();
|
||||
|
||||
close(fd);
|
||||
free(ibuf);
|
||||
free(imsgbuf);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
@ -1197,21 +1202,21 @@ network_bulk(struct parse_result *res)
|
||||
net.rd = res->rd;
|
||||
|
||||
if (res->action == NETWORK_BULK_ADD) {
|
||||
imsg_compose(ibuf, IMSG_NETWORK_ADD,
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_ADD,
|
||||
0, 0, -1, &net, sizeof(net));
|
||||
/*
|
||||
* can't use send_filterset since that
|
||||
* would free the set.
|
||||
*/
|
||||
TAILQ_FOREACH(s, &res->set, entry) {
|
||||
imsg_compose(ibuf,
|
||||
imsg_compose(imsgbuf,
|
||||
IMSG_FILTER_SET,
|
||||
0, 0, -1, s, sizeof(*s));
|
||||
}
|
||||
imsg_compose(ibuf, IMSG_NETWORK_DONE,
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_DONE,
|
||||
0, 0, -1, NULL, 0);
|
||||
} else
|
||||
imsg_compose(ibuf, IMSG_NETWORK_REMOVE,
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_REMOVE,
|
||||
0, 0, -1, &net, sizeof(net));
|
||||
}
|
||||
}
|
||||
@ -1388,22 +1393,22 @@ network_mrt_dump(struct mrt_rib *mr, struct mrt_peer *mp, void *arg)
|
||||
net.type = NETWORK_MRTCLONE;
|
||||
/* XXX rd can't be set and will be 0 */
|
||||
|
||||
imsg_compose(ibuf, IMSG_NETWORK_ADD, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_ADD, 0, 0, -1,
|
||||
&net, sizeof(net));
|
||||
if ((msg = imsg_create(ibuf, IMSG_NETWORK_ASPATH,
|
||||
if ((msg = imsg_create(imsgbuf, IMSG_NETWORK_ASPATH,
|
||||
0, 0, sizeof(ctl) + mre->aspath_len)) == NULL)
|
||||
errx(1, "imsg_create failure");
|
||||
if (imsg_add(msg, &ctl, sizeof(ctl)) == -1 ||
|
||||
imsg_add(msg, mre->aspath, mre->aspath_len) == -1)
|
||||
errx(1, "imsg_add failure");
|
||||
imsg_close(ibuf, msg);
|
||||
imsg_close(imsgbuf, msg);
|
||||
for (j = 0; j < mre->nattrs; j++)
|
||||
imsg_compose(ibuf, IMSG_NETWORK_ATTR, 0, 0, -1,
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_ATTR, 0, 0, -1,
|
||||
mre->attrs[j].attr, mre->attrs[j].attr_len);
|
||||
imsg_compose(ibuf, IMSG_NETWORK_DONE, 0, 0, -1, NULL, 0);
|
||||
imsg_compose(imsgbuf, IMSG_NETWORK_DONE, 0, 0, -1, NULL, 0);
|
||||
|
||||
while (ibuf->w.queued) {
|
||||
if (msgbuf_write(&ibuf->w) <= 0 && errno != EAGAIN)
|
||||
while (imsgbuf->w.queued) {
|
||||
if (msgbuf_write(&imsgbuf->w) <= 0 && errno != EAGAIN)
|
||||
err(1, "write error");
|
||||
}
|
||||
}
|
||||
@ -1807,7 +1812,8 @@ show_mrt_update(u_char *p, uint16_t len, int reqflags, int addpath)
|
||||
while (len > 0) {
|
||||
if (addpath) {
|
||||
if (len <= sizeof(pathid)) {
|
||||
printf(" bad nlri prefix: pathid, len %d", len);
|
||||
printf(" bad nlri prefix: pathid, "
|
||||
"len %d", len);
|
||||
return;
|
||||
}
|
||||
memcpy(&pathid, p, sizeof(pathid));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: mrtparser.c,v 1.19 2022/10/18 09:30:29 job Exp $ */
|
||||
/* $OpenBSD: mrtparser.c,v 1.20 2023/11/20 14:18:21 claudio Exp $ */
|
||||
/*
|
||||
* Copyright (c) 2011 Claudio Jeker <claudio@openbsd.org>
|
||||
*
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: output.c,v 1.41 2023/04/28 13:24:25 claudio Exp $ */
|
||||
/* $OpenBSD: output.c,v 1.42 2023/11/20 14:18:21 claudio Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003 Henning Brauer <henning@openbsd.org>
|
||||
@ -1176,21 +1176,21 @@ show_rtr(struct ctl_show_rtr *rtr)
|
||||
if (rtr->local_addr.aid != AID_UNSPEC)
|
||||
printf(" Local Address: %s\n", log_addr(&rtr->local_addr));
|
||||
if (rtr->session_id != -1)
|
||||
printf (" Session ID: %d Serial #: %u\n",
|
||||
printf(" Session ID: %d Serial #: %u\n",
|
||||
rtr->session_id, rtr->serial);
|
||||
printf(" Refresh: %u, Retry: %u, Expire: %u\n",
|
||||
rtr->refresh, rtr->retry, rtr->expire);
|
||||
|
||||
if (rtr->last_sent_error != NO_ERROR) {
|
||||
printf(" Last sent error: %s\n",
|
||||
log_rtr_error(rtr->last_sent_error));
|
||||
log_rtr_error(rtr->last_sent_error));
|
||||
if (rtr->last_sent_msg[0])
|
||||
printf(" with reason \"%s\"",
|
||||
log_reason(rtr->last_sent_msg));
|
||||
}
|
||||
if (rtr->last_recv_error != NO_ERROR) {
|
||||
printf(" Last received error: %s\n",
|
||||
log_rtr_error(rtr->last_recv_error));
|
||||
log_rtr_error(rtr->last_recv_error));
|
||||
if (rtr->last_recv_msg[0])
|
||||
printf(" with reason \"%s\"",
|
||||
log_reason(rtr->last_recv_msg));
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: output_json.c,v 1.35 2023/06/05 16:24:05 claudio Exp $ */
|
||||
/* $OpenBSD: output_json.c,v 1.36 2023/11/20 14:18:21 claudio Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2020 Claudio Jeker <claudio@openbsd.org>
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: output_ometric.c,v 1.11 2023/03/28 12:07:09 claudio Exp $ */
|
||||
/* $OpenBSD: output_ometric.c,v 1.12 2023/11/20 14:18:21 claudio Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022 Claudio Jeker <claudio@openbsd.org>
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: parser.c,v 1.133 2023/05/09 13:26:27 claudio Exp $ */
|
||||
/* $OpenBSD: parser.c,v 1.134 2023/11/20 14:18:21 claudio Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
|
||||
@ -329,8 +329,8 @@ static const struct token t_show_mrt_as[] = {
|
||||
static const struct token t_show_prefix[] = {
|
||||
{ FLAG, "all", F_LONGER, t_show_rib},
|
||||
{ FLAG, "longer-prefixes", F_LONGER, t_show_rib},
|
||||
{ FLAG, "or-longer", F_LONGER, t_show_rib},
|
||||
{ FLAG, "or-shorter", F_SHORTER, t_show_rib},
|
||||
{ FLAG, "or-longer", F_LONGER, t_show_rib},
|
||||
{ FLAG, "or-shorter", F_SHORTER, t_show_rib},
|
||||
{ ANYTOKEN, "", NONE, t_show_rib},
|
||||
{ ENDTOKEN, "", NONE, NULL}
|
||||
};
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $OpenBSD: snmpe.c,v 1.91 2023/11/12 19:59:56 martijn Exp $ */
|
||||
/* $OpenBSD: snmpe.c,v 1.92 2023/11/20 10:32:45 martijn Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2007, 2008, 2012 Reyk Floeter <reyk@openbsd.org>
|
||||
@ -648,7 +648,6 @@ snmpe_writecb(int fd, short type, void *arg)
|
||||
msg->sm_datalen - reqlen);
|
||||
nmsg->sm_datalen = msg->sm_datalen - reqlen;
|
||||
snmp_msgfree(msg);
|
||||
snmpe_prepare_read(nmsg, fd);
|
||||
snmpe_tryparse(fd, nmsg);
|
||||
} else {
|
||||
snmp_msgfree(msg);
|
||||
|
Loading…
Reference in New Issue
Block a user