From 729656abba9acca2cb3039df21cb1221af3bbed6 Mon Sep 17 00:00:00 2001 From: purplerain Date: Tue, 27 Feb 2024 05:02:43 +0000 Subject: [PATCH] sync with OpenBSD -current --- lib/libcrypto/objects/obj_dat.c | 34 +--- lib/libcrypto/stack/stack.c | 37 +++- lib/libpcap/pcap-filter.5 | 6 +- sys/arch/amd64/amd64/acpi_wakecode.S | 13 +- sys/arch/amd64/amd64/cpu.c | 6 +- sys/arch/amd64/amd64/locore.S | 7 +- sys/arch/amd64/amd64/machdep.c | 5 +- sys/arch/amd64/amd64/vmm_machdep.c | 4 +- sys/arch/amd64/amd64/vmm_support.S | 26 +-- sys/arch/amd64/include/segments.h | 13 +- sys/dev/fdt/dwpcie.c | 6 +- sys/dev/fdt/if_dwqe_fdt.c | 175 +++++++++++++++--- sys/dev/fdt/rkclock.c | 15 +- sys/dev/fdt/rkclock_clocks.h | 3 + sys/dev/ic/dwqevar.h | 3 +- sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c | 1 - sys/dev/pci/drm/amd/amdgpu/amdgpu_gfx.c | 9 +- sys/dev/pci/drm/amd/amdgpu/cik_ih.c | 6 + sys/dev/pci/drm/amd/amdgpu/cz_ih.c | 5 + sys/dev/pci/drm/amd/amdgpu/gfx_v10_0.c | 2 - sys/dev/pci/drm/amd/amdgpu/iceland_ih.c | 5 + sys/dev/pci/drm/amd/amdgpu/ih_v6_0.c | 6 + sys/dev/pci/drm/amd/amdgpu/ih_v6_1.c | 7 + sys/dev/pci/drm/amd/amdgpu/navi10_ih.c | 6 + sys/dev/pci/drm/amd/amdgpu/si_ih.c | 6 + sys/dev/pci/drm/amd/amdgpu/soc21.c | 4 +- sys/dev/pci/drm/amd/amdgpu/tonga_ih.c | 6 + sys/dev/pci/drm/amd/amdgpu/vega10_ih.c | 6 + sys/dev/pci/drm/amd/amdgpu/vega20_ih.c | 6 + .../pci/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 14 +- .../dc/link/protocols/link_dp_training.c | 5 +- sys/dev/pci/drm/drm_prime.c | 2 +- sys/dev/pci/if_iwx.c | 7 +- usr.sbin/dvmrpd/rde.c | 7 +- usr.sbin/npppd/common/addr_range.c | 7 +- usr.sbin/npppd/common/debugutil.c | 8 +- usr.sbin/npppd/common/hash.c | 35 +--- usr.sbin/npppd/common/recvfromto.c | 38 +--- usr.sbin/npppd/l2tp/l2tp.h | 6 +- usr.sbin/npppd/npppd/chap.c | 9 +- usr.sbin/npppd/npppd/fsm.c | 73 ++------ usr.sbin/npppd/npppd/fsm.h | 4 +- usr.sbin/npppd/npppd/npppd_auth.c | 10 +- usr.sbin/npppd/npppd/npppd_auth_local.h | 5 +- usr.sbin/npppd/npppd/npppd_iface.h | 26 +-- usr.sbin/npppd/npppd/npppd_local.h | 4 +- usr.sbin/npppd/npppd/npppd_radius.c | 57 +++++- usr.sbin/npppd/npppd/npppd_radius.h | 1 + usr.sbin/npppd/npppd/pap.c | 9 +- usr.sbin/npppd/npppd/ppp.c | 9 +- usr.sbin/npppd/npppd/radius_req.c | 31 ++-- usr.sbin/npppd/npppd/radius_req.h | 11 +- usr.sbin/npppd/pptp/pptp.h | 4 +- usr.sbin/rpki-client/extern.h | 4 +- usr.sbin/rpki-client/main.c | 6 +- usr.sbin/rpki-client/output-json.c | 3 +- usr.sbin/rpki-client/output-ometric.c | 4 +- usr.sbin/rpki-client/print.c | 3 +- usr.sbin/rpki-client/repo.c | 14 +- usr.sbin/rpki-client/rsync.c | 3 +- usr.sbin/tcpdump/tcpdump.8 | 6 +- 61 files changed, 532 insertions(+), 321 deletions(-) diff --git a/lib/libcrypto/objects/obj_dat.c b/lib/libcrypto/objects/obj_dat.c index 170a6d58a..1719cc73e 100644 --- a/lib/libcrypto/objects/obj_dat.c +++ b/lib/libcrypto/objects/obj_dat.c @@ -1,4 +1,4 @@ -/* $OpenBSD: obj_dat.c,v 1.85 2024/01/24 14:05:10 jsing Exp $ */ +/* $OpenBSD: obj_dat.c,v 1.86 2024/02/26 15:00:30 tb Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -440,7 +440,8 @@ const void * OBJ_bsearch_(const void *key, const void *base, int num, int size, int (*cmp)(const void *, const void *)) { - return OBJ_bsearch_ex_(key, base, num, size, cmp, 0); + OBJerror(ERR_R_DISABLED); + return NULL; } LCRYPTO_ALIAS(OBJ_bsearch_); @@ -448,33 +449,8 @@ const void * OBJ_bsearch_ex_(const void *key, const void *base_, int num, int size, int (*cmp)(const void *, const void *), int flags) { - const char *base = base_; - int l, h, i = 0, c = 0; - const char *p = NULL; - - if (num == 0) - return (NULL); - l = 0; - h = num; - while (l < h) { - i = (l + h) / 2; - p = &(base[i * size]); - c = (*cmp)(key, p); - if (c < 0) - h = i; - else if (c > 0) - l = i + 1; - else - break; - } - if (c != 0 && !(flags & OBJ_BSEARCH_VALUE_ON_NOMATCH)) - p = NULL; - else if (c == 0 && (flags & OBJ_BSEARCH_FIRST_VALUE_ON_MATCH)) { - while (i > 0 && (*cmp)(key, &(base[(i - 1) * size])) == 0) - i--; - p = &(base[i * size]); - } - return (p); + OBJerror(ERR_R_DISABLED); + return NULL; } /* Convert an object name into an ASN1_OBJECT diff --git a/lib/libcrypto/stack/stack.c b/lib/libcrypto/stack/stack.c index f5c568dc5..818e73844 100644 --- a/lib/libcrypto/stack/stack.c +++ b/lib/libcrypto/stack/stack.c @@ -1,4 +1,4 @@ -/* $OpenBSD: stack.c,v 1.24 2024/01/13 16:32:53 tb Exp $ */ +/* $OpenBSD: stack.c,v 1.25 2024/02/26 15:00:30 tb Exp $ */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * @@ -195,6 +195,39 @@ sk_delete(_STACK *st, int loc) } LCRYPTO_ALIAS(sk_delete); +static const void * +obj_bsearch_ex(const void *key, const void *base_, int num, int size, + int (*cmp)(const void *, const void *), int flags) +{ + const char *base = base_; + int l, h, i = 0, c = 0; + const char *p = NULL; + + if (num == 0) + return (NULL); + l = 0; + h = num; + while (l < h) { + i = (l + h) / 2; + p = &(base[i * size]); + c = (*cmp)(key, p); + if (c < 0) + h = i; + else if (c > 0) + l = i + 1; + else + break; + } + if (c != 0 && !(flags & OBJ_BSEARCH_VALUE_ON_NOMATCH)) + p = NULL; + else if (c == 0 && (flags & OBJ_BSEARCH_FIRST_VALUE_ON_MATCH)) { + while (i > 0 && (*cmp)(key, &(base[(i - 1) * size])) == 0) + i--; + p = &(base[i * size]); + } + return (p); +} + static int internal_find(_STACK *st, void *data, int ret_val_options) { @@ -213,7 +246,7 @@ internal_find(_STACK *st, void *data, int ret_val_options) sk_sort(st); if (data == NULL) return (-1); - r = OBJ_bsearch_ex_(&data, st->data, st->num, sizeof(void *), st->comp, + r = obj_bsearch_ex(&data, st->data, st->num, sizeof(void *), st->comp, ret_val_options); if (r == NULL) return (-1); diff --git a/lib/libpcap/pcap-filter.5 b/lib/libpcap/pcap-filter.5 index fae308365..dc39a259a 100644 --- a/lib/libpcap/pcap-filter.5 +++ b/lib/libpcap/pcap-filter.5 @@ -1,4 +1,4 @@ -.\" $OpenBSD: pcap-filter.5,v 1.12 2023/04/12 09:55:22 jsg Exp $ +.\" $OpenBSD: pcap-filter.5,v 1.13 2024/02/26 06:49:38 jmc Exp $ .\" .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996, 1997 .\" The Regents of the University of California. All rights reserved. @@ -20,7 +20,7 @@ .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" -.Dd $Mdocdate: April 12 2023 $ +.Dd $Mdocdate: February 26 2024 $ .Dt PCAP-FILTER 5 .Os .Sh NAME @@ -662,7 +662,7 @@ and frame subtype matches the specified If the specified .Ar wlan_type is -.Cm mgtv , +.Cm mgt , then valid values for .Ar wlan_subtype are diff --git a/sys/arch/amd64/amd64/acpi_wakecode.S b/sys/arch/amd64/amd64/acpi_wakecode.S index ddcdc74c3..da4759766 100644 --- a/sys/arch/amd64/amd64/acpi_wakecode.S +++ b/sys/arch/amd64/amd64/acpi_wakecode.S @@ -1,4 +1,4 @@ -/* $OpenBSD: acpi_wakecode.S,v 1.49 2022/12/01 00:26:15 guenther Exp $ */ +/* $OpenBSD: acpi_wakecode.S,v 1.50 2024/02/25 22:33:09 guenther Exp $ */ /* * Copyright (c) 2001 Takanori Watanabe * Copyright (c) 2001 Mitsuru IWASAKI @@ -267,8 +267,8 @@ _ACPI_TRMP_LABEL(.Lacpi_long_mode_trampoline) wrmsr movl $MSR_CSTAR, %ecx - movl .Lacpi_saved_cstar, %eax - movl .Lacpi_saved_cstar+4, %edx + xorl %eax, %eax + xorl %edx, %edx wrmsr movl $MSR_SFMASK, %ecx @@ -691,8 +691,6 @@ _ACPI_TRMP_DATA_LABEL(.Lacpi_saved_star) .quad 0 _ACPI_TRMP_DATA_LABEL(.Lacpi_saved_lstar) .quad 0 -_ACPI_TRMP_DATA_LABEL(.Lacpi_saved_cstar) - .quad 0 _ACPI_TRMP_DATA_LABEL(.Lacpi_saved_sfmask) .quad 0 #if NLAPIC > 0 @@ -781,11 +779,6 @@ NENTRY(acpi_savecpu) movl %eax, .Lacpi_saved_star movl %edx, .Lacpi_saved_star+4 - movl $MSR_CSTAR, %ecx - rdmsr - movl %eax, .Lacpi_saved_cstar - movl %edx, .Lacpi_saved_cstar+4 - movl $MSR_LSTAR, %ecx rdmsr movl %eax, .Lacpi_saved_lstar diff --git a/sys/arch/amd64/amd64/cpu.c b/sys/arch/amd64/amd64/cpu.c index d82b11801..ea0d55763 100644 --- a/sys/arch/amd64/amd64/cpu.c +++ b/sys/arch/amd64/amd64/cpu.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cpu.c,v 1.182 2024/02/24 17:00:05 deraadt Exp $ */ +/* $OpenBSD: cpu.c,v 1.183 2024/02/25 22:33:09 guenther Exp $ */ /* $NetBSD: cpu.c,v 1.1 2003/04/26 18:39:26 fvdl Exp $ */ /*- @@ -1184,10 +1184,10 @@ cpu_init_msrs(struct cpu_info *ci) { wrmsr(MSR_STAR, ((uint64_t)GSEL(GCODE_SEL, SEL_KPL) << 32) | - ((uint64_t)GSEL(GUCODE32_SEL, SEL_UPL) << 48)); + ((uint64_t)GSEL(GUDATA_SEL-1, SEL_UPL) << 48)); wrmsr(MSR_LSTAR, cpu_meltdown ? (uint64_t)Xsyscall_meltdown : (uint64_t)Xsyscall); - wrmsr(MSR_CSTAR, (uint64_t)Xsyscall32); + wrmsr(MSR_CSTAR, 0); wrmsr(MSR_SFMASK, PSL_NT|PSL_T|PSL_I|PSL_C|PSL_D|PSL_AC); wrmsr(MSR_FSBASE, 0); diff --git a/sys/arch/amd64/amd64/locore.S b/sys/arch/amd64/amd64/locore.S index 3ccdc2e0f..89f4f40fa 100644 --- a/sys/arch/amd64/amd64/locore.S +++ b/sys/arch/amd64/amd64/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.145 2024/02/12 01:18:17 guenther Exp $ */ +/* $OpenBSD: locore.S,v 1.146 2024/02/25 22:33:09 guenther Exp $ */ /* $NetBSD: locore.S,v 1.13 2004/03/25 18:33:17 drochner Exp $ */ /* @@ -507,11 +507,6 @@ ENTRY(savectx) lfence END(savectx) -// XXX this should not behave like a nop -IDTVEC(syscall32) - sysret /* go away please */ -END(Xsyscall32) - /* * syscall insn entry. * Enter here with interrupts blocked; %rcx contains the caller's diff --git a/sys/arch/amd64/amd64/machdep.c b/sys/arch/amd64/amd64/machdep.c index 9fa994bdc..f58e6c585 100644 --- a/sys/arch/amd64/amd64/machdep.c +++ b/sys/arch/amd64/amd64/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.290 2024/02/03 16:21:22 deraadt Exp $ */ +/* $OpenBSD: machdep.c,v 1.291 2024/02/25 22:33:09 guenther Exp $ */ /* $NetBSD: machdep.c,v 1.3 2003/05/07 22:58:18 fvdl Exp $ */ /*- @@ -1744,9 +1744,6 @@ init_x86_64(paddr_t first_avail) set_mem_segment(GDT_ADDR_MEM(cpu_info_primary.ci_gdt, GDATA_SEL), 0, 0xfffff, SDT_MEMRWA, SEL_KPL, 1, 0, 1); - set_mem_segment(GDT_ADDR_MEM(cpu_info_primary.ci_gdt, GUCODE32_SEL), 0, - atop(VM_MAXUSER_ADDRESS32) - 1, SDT_MEMERA, SEL_UPL, 1, 1, 0); - set_mem_segment(GDT_ADDR_MEM(cpu_info_primary.ci_gdt, GUDATA_SEL), 0, atop(VM_MAXUSER_ADDRESS) - 1, SDT_MEMRWA, SEL_UPL, 1, 0, 1); diff --git a/sys/arch/amd64/amd64/vmm_machdep.c b/sys/arch/amd64/amd64/vmm_machdep.c index 7cc375917..943797dde 100644 --- a/sys/arch/amd64/amd64/vmm_machdep.c +++ b/sys/arch/amd64/amd64/vmm_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vmm_machdep.c,v 1.18 2024/02/12 02:57:14 jsg Exp $ */ +/* $OpenBSD: vmm_machdep.c,v 1.19 2024/02/25 22:33:09 guenther Exp $ */ /* * Copyright (c) 2014 Mike Larkin * @@ -2734,7 +2734,7 @@ vcpu_reset_regs_vmx(struct vcpu *vcpu, struct vcpu_reg_state *vrs) msr_store[2].vms_index = MSR_LSTAR; msr_store[2].vms_data = rdmsr(MSR_LSTAR); msr_store[3].vms_index = MSR_CSTAR; - msr_store[3].vms_data = rdmsr(MSR_CSTAR); + msr_store[3].vms_data = 0; msr_store[4].vms_index = MSR_SFMASK; msr_store[4].vms_data = rdmsr(MSR_SFMASK); msr_store[5].vms_index = MSR_KERNELGSBASE; diff --git a/sys/arch/amd64/amd64/vmm_support.S b/sys/arch/amd64/amd64/vmm_support.S index 7b7d9f281..aadfb4a96 100644 --- a/sys/arch/amd64/amd64/vmm_support.S +++ b/sys/arch/amd64/amd64/vmm_support.S @@ -1,4 +1,4 @@ -/* $OpenBSD: vmm_support.S,v 1.24 2023/11/28 00:17:48 dv Exp $ */ +/* $OpenBSD: vmm_support.S,v 1.25 2024/02/25 22:33:09 guenther Exp $ */ /* * Copyright (c) 2014 Mike Larkin * @@ -225,12 +225,6 @@ skip_init: pushq %rax pushq %rdx - /* XXX - unused? */ - movq $MSR_CSTAR, %rcx - rdmsr - pushq %rax - pushq %rdx - movq $MSR_SFMASK, %rcx rdmsr pushq %rax @@ -483,9 +477,9 @@ restore_host: movq $MSR_SFMASK, %rcx wrmsr - /* XXX - unused? */ - popq %rdx - popq %rax + /* make sure guest doesn't bleed into host */ + xorl %edx, %edx + xorl %eax, %eax movq $MSR_CSTAR, %rcx wrmsr @@ -584,12 +578,6 @@ ENTRY(svm_enter_guest) pushq %rax pushq %rdx - /* XXX - unused? */ - movq $MSR_CSTAR, %rcx - rdmsr - pushq %rax - pushq %rdx - movq $MSR_SFMASK, %rcx rdmsr pushq %rax @@ -696,9 +684,9 @@ restore_host_svm: movq $MSR_SFMASK, %rcx wrmsr - /* XXX - unused? */ - popq %rdx - popq %rax + /* make sure guest doesn't bleed into host */ + xorl %edx, %edx + xorl %eax, %eax movq $MSR_CSTAR, %rcx wrmsr diff --git a/sys/arch/amd64/include/segments.h b/sys/arch/amd64/include/segments.h index d4dfa6f20..654a6af58 100644 --- a/sys/arch/amd64/include/segments.h +++ b/sys/arch/amd64/include/segments.h @@ -1,4 +1,4 @@ -/* $OpenBSD: segments.h,v 1.16 2024/01/19 18:38:16 kettenis Exp $ */ +/* $OpenBSD: segments.h,v 1.17 2024/02/25 22:33:09 guenther Exp $ */ /* $NetBSD: segments.h,v 1.1 2003/04/26 18:39:47 fvdl Exp $ */ /*- @@ -247,16 +247,15 @@ void cpu_init_idt(void); * Then comes the predefined TSS descriptor. * There are NGDT_SYS of them. * - * The particular order of the UCODE32, UDATA, and UCODE descriptors is - * required by the syscall/sysret instructions. + * The particular order of the UDATA and UCODE descriptors is + * required by the sysretq instruction. */ #define GNULL_SEL 0 /* Null descriptor */ #define GCODE_SEL 1 /* Kernel code descriptor */ #define GDATA_SEL 2 /* Kernel data descriptor */ -#define GUCODE32_SEL 3 /* User 32bit code descriptor (unused) */ -#define GUDATA_SEL 4 /* User data descriptor */ -#define GUCODE_SEL 5 /* User code descriptor */ -#define NGDT_MEM 6 +#define GUDATA_SEL 3 /* User data descriptor */ +#define GUCODE_SEL 4 /* User code descriptor */ +#define NGDT_MEM 5 #define GPROC0_SEL 0 /* common TSS */ #define NGDT_SYS 1 diff --git a/sys/dev/fdt/dwpcie.c b/sys/dev/fdt/dwpcie.c index 19e45ca20..384dc2507 100644 --- a/sys/dev/fdt/dwpcie.c +++ b/sys/dev/fdt/dwpcie.c @@ -1,4 +1,4 @@ -/* $OpenBSD: dwpcie.c,v 1.51 2024/02/03 10:37:26 kettenis Exp $ */ +/* $OpenBSD: dwpcie.c,v 1.52 2024/02/26 21:41:24 kettenis Exp $ */ /* * Copyright (c) 2018 Mark Kettenis * @@ -733,10 +733,6 @@ dwpcie_attach_deferred(struct device *self) if (OF_getproplen(sc->sc_node, "msi-map") > 0) pba.pba_flags |= PCI_FLAGS_MSIVEC_ENABLED; - /* XXX No working MSI on RK3588 yet. */ - if (OF_is_compatible(sc->sc_node, "rockchip,rk3588-pcie")) - pba.pba_flags &= ~PCI_FLAGS_MSI_ENABLED; - pci_dopm = 1; config_found(self, &pba, NULL); diff --git a/sys/dev/fdt/if_dwqe_fdt.c b/sys/dev/fdt/if_dwqe_fdt.c index 7e6afaba3..1bdb8e081 100644 --- a/sys/dev/fdt/if_dwqe_fdt.c +++ b/sys/dev/fdt/if_dwqe_fdt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_dwqe_fdt.c,v 1.17 2023/10/10 07:11:50 stsp Exp $ */ +/* $OpenBSD: if_dwqe_fdt.c,v 1.18 2024/02/26 18:57:50 kettenis Exp $ */ /* * Copyright (c) 2008, 2019 Mark Kettenis * Copyright (c) 2017, 2022 Patrick Wildt @@ -73,6 +73,7 @@ void dwqe_setup_jh7110(struct dwqe_softc *); void dwqe_mii_statchg_jh7110(struct device *); void dwqe_setup_rk3568(struct dwqe_fdt_softc *); void dwqe_mii_statchg_rk3568(struct device *); +void dwqe_setup_rk3588(struct dwqe_fdt_softc *); void dwqe_mii_statchg_rk3588(struct device *); const struct cfattach dwqe_fdt_ca = { @@ -114,10 +115,12 @@ dwqe_fdt_attach(struct device *parent, struct device *self, void *aux) /* Decide GMAC id through address */ switch (faa->fa_reg[0].addr) { case 0xfe2a0000: /* RK3568 */ + case 0xfe1b0000: /* RK3588 */ case 0x16030000: /* JH7110 */ fsc->sc_gmac_id = 0; break; case 0xfe010000: /* RK3568 */ + case 0xfe1c0000: /* RK3588 */ case 0x16040000: /* JH7110 */ fsc->sc_gmac_id = 1; break; @@ -137,6 +140,8 @@ dwqe_fdt_attach(struct device *parent, struct device *self, void *aux) sc->sc_phy_mode = DWQE_PHY_MODE_RGMII_TXID; else if (strcmp(phy_mode, "rgmii-id") == 0) sc->sc_phy_mode = DWQE_PHY_MODE_RGMII_ID; + else if (strcmp(phy_mode, "rmii") == 0) + sc->sc_phy_mode = DWQE_PHY_MODE_RMII; else sc->sc_phy_mode = DWQE_PHY_MODE_UNKNOWN; @@ -162,11 +167,17 @@ dwqe_fdt_attach(struct device *parent, struct device *self, void *aux) if (OF_is_compatible(faa->fa_node, "starfive,jh7110-dwmac")) { clock_enable(faa->fa_node, "tx"); clock_enable(faa->fa_node, "gtx"); - } else if (OF_is_compatible(faa->fa_node, "rockchip,rk3568-gmac")) { - clock_enable(faa->fa_node, "mac_clk_rx"); - clock_enable(faa->fa_node, "mac_clk_tx"); + } else if (OF_is_compatible(faa->fa_node, "rockchip,rk3568-gmac") || + OF_is_compatible(faa->fa_node, "rockchip,rk3588-gmac")) { clock_enable(faa->fa_node, "aclk_mac"); clock_enable(faa->fa_node, "pclk_mac"); + clock_enable(faa->fa_node, "mac_clk_tx"); + clock_enable(faa->fa_node, "clk_mac_speed"); + if (strcmp(phy_mode, "rmii") == 0) { + clock_enable(faa->fa_node, "mac_clk_rx"); + clock_enable(faa->fa_node, "clk_mac_ref"); + clock_enable(faa->fa_node, "clk_mac_refout"); + } } delay(5000); @@ -175,6 +186,8 @@ dwqe_fdt_attach(struct device *parent, struct device *self, void *aux) dwqe_setup_jh7110(sc); else if (OF_is_compatible(faa->fa_node, "rockchip,rk3568-gmac")) dwqe_setup_rk3568(fsc); + else if (OF_is_compatible(faa->fa_node, "rockchip,rk3588-gmac")) + dwqe_setup_rk3588(fsc); /* Power up PHY. */ phy_supply = OF_getpropint(faa->fa_node, "phy-supply", 0); @@ -329,6 +342,26 @@ dwqe_reset_phy(struct dwqe_softc *sc, uint32_t phy) #define RK3568_GMAC_TXCLK_DLY_SET(_v) ((1 << 0) << 16 | ((_v) << 0)) #define RK3568_GMAC_RXCLK_DLY_SET(_v) ((1 << 1) << 16 | ((_v) << 1)) +/* RK3588 registers */ +#define RK3588_GRF_GMAC_CON7 0x031c +#define RK3588_GMACx_RXCLK_DLY_ENA(id) ((1 << (2 * (id) + 3)) << 16 | (1 << (2 * (id) + 3))) +#define RK3588_GMACx_TXCLK_DLY_ENA(id) ((1 << (2 * (id) + 2)) << 16 | (1 << (2 * (id) + 2))) +#define RK3588_GRF_GMAC_CON8 0x0320 +#define RK3588_GRF_GMAC_CON9 0x0324 +#define RK3588_GMAC_CLK_RX_DL_CFG(val) ((0x7f << 8) << 16 | ((val) << 8)) +#define RK3588_GMAC_CLK_TX_DL_CFG(val) ((0x7f << 0) << 16 | ((val) << 0)) +#define RK3588_PHP_GRF_GMAC_CON0 0x0008 +#define RK3588_GMACx_PHY_INTF_SEL_RGMII(id) ((0x7 << (6 * (id) + 3)) << 16 | (0x1 << (6 * (id) + 3))) +#define RK3588_GMACx_PHY_INTF_SEL_RMII(id) ((0x7 << (6 * (id) + 3)) << 16 | (0x4 << (6 * (id) + 3))) +#define RK3588_PHP_GRF_CLK_CON1 0x0070 +#define RK3588_RMII_MODE_GMACx_RMII(id) ((0x1 << (5 * (id))) << 16 | (0x1 << (5 * (id)))) +#define RK3588_RMII_MODE_GMACx_RGMII(id) ((0x1 << (5 * (id))) << 16 | (0x0 << (5 * (id)))) +#define RK3588_MII_TX_CLK_SEL_RMII_2_5(id) ((0x3 << (5 * (id) + 2)) << 16 | (0x1 << (5 * (id) + 2))) +#define RK3588_MII_TX_CLK_SEL_RMII_25(id) ((0x3 << (5 * (id) + 2)) << 16 | (0x0 << (5 * (id) + 2))) +#define RK3588_MII_TX_CLK_SEL_RGMII_2_5(id) ((0x3 << (5 * (id) + 2)) << 16 | (0x2 << (5 * (id) + 2))) +#define RK3588_MII_TX_CLK_SEL_RGMII_25(id) ((0x3 << (5 * (id) + 2)) << 16 | (0x3 << (5 * (id) + 2))) +#define RK3588_MII_TX_CLK_SEL_RGMII_125(id) ((0x3 << (5 * (id) + 2)) << 16 | (0x0 << (5 * (id) + 2))) + void dwqe_mii_statchg_jh7110_task(void *); void dwqe_mii_statchg_rk3568_task(void *); @@ -410,7 +443,6 @@ void dwqe_setup_rk3568(struct dwqe_fdt_softc *fsc) { struct dwqe_softc *sc = &fsc->sc_sc; - char phy_mode[32]; struct regmap *rm; uint32_t grf; int tx_delay, rx_delay; @@ -421,30 +453,35 @@ dwqe_setup_rk3568(struct dwqe_fdt_softc *fsc) if (rm == NULL) return; - if (OF_getprop(sc->sc_node, "phy-mode", - phy_mode, sizeof(phy_mode)) <= 0) + switch (sc->sc_phy_mode) { + case DWQE_PHY_MODE_RGMII: + case DWQE_PHY_MODE_RGMII_ID: + case DWQE_PHY_MODE_RGMII_RXID: + case DWQE_PHY_MODE_RGMII_TXID: + iface = RK3568_GMAC_PHY_INTF_SEL_RGMII; + break; + case DWQE_PHY_MODE_RMII: + iface = RK3568_GMAC_PHY_INTF_SEL_RMII; + break; + default: return; + } tx_delay = OF_getpropint(sc->sc_node, "tx_delay", 0x30); rx_delay = OF_getpropint(sc->sc_node, "rx_delay", 0x10); - - if (strcmp(phy_mode, "rgmii") == 0) { - iface = RK3568_GMAC_PHY_INTF_SEL_RGMII; - } else if (strcmp(phy_mode, "rgmii-id") == 0) { - iface = RK3568_GMAC_PHY_INTF_SEL_RGMII; - /* id is "internal delay" */ + switch (sc->sc_phy_mode) { + case DWQE_PHY_MODE_RGMII_ID: tx_delay = rx_delay = 0; - } else if (strcmp(phy_mode, "rgmii-rxid") == 0) { - iface = RK3568_GMAC_PHY_INTF_SEL_RGMII; + break; + case DWQE_PHY_MODE_RGMII_RXID: rx_delay = 0; - } else if (strcmp(phy_mode, "rgmii-txid") == 0) { - iface = RK3568_GMAC_PHY_INTF_SEL_RGMII; + break; + case DWQE_PHY_MODE_RGMII_TXID: tx_delay = 0; - } else if (strcmp(phy_mode, "rmii") == 0) { - iface = RK3568_GMAC_PHY_INTF_SEL_RMII; - tx_delay = rx_delay = 0; - } else - return; + break; + default: + break; + } /* Program clock delay lines. */ regmap_write_4(rm, RK3568_GRF_GMACx_CON0(fsc->sc_gmac_id), @@ -490,21 +527,99 @@ dwqe_mii_statchg_rk3568(struct device *self) } void -dwqe_mii_statchg_rk3588(struct device *self) +dwqe_setup_rk3588(struct dwqe_fdt_softc *fsc) { - struct dwqe_softc *sc = (void *)self; - struct ifnet *ifp = &sc->sc_ac.ac_if; + struct dwqe_softc *sc = &fsc->sc_sc; struct regmap *rm; - uint32_t grf; - uint32_t gmac_clk_sel = 0; - - dwqe_mii_statchg(self); + struct regmap *php_rm; + uint32_t grf, php_grf; + int tx_delay, rx_delay; + uint32_t iface, clk; grf = OF_getpropint(sc->sc_node, "rockchip,grf", 0); rm = regmap_byphandle(grf); if (rm == NULL) return; + php_grf = OF_getpropint(sc->sc_node, "rockchip,php-grf", 0); + php_rm = regmap_byphandle(php_grf); + if (php_rm == NULL) + return; + + switch (sc->sc_phy_mode) { + case DWQE_PHY_MODE_RGMII: + case DWQE_PHY_MODE_RGMII_ID: + case DWQE_PHY_MODE_RGMII_RXID: + case DWQE_PHY_MODE_RGMII_TXID: + iface = RK3588_GMACx_PHY_INTF_SEL_RGMII(fsc->sc_gmac_id); + clk = RK3588_RMII_MODE_GMACx_RGMII(fsc->sc_gmac_id); + sc->sc_clk_sel_2_5 = + RK3588_MII_TX_CLK_SEL_RGMII_2_5(fsc->sc_gmac_id); + sc->sc_clk_sel_25 = + RK3588_MII_TX_CLK_SEL_RGMII_25(fsc->sc_gmac_id); + sc->sc_clk_sel_125 = + RK3588_MII_TX_CLK_SEL_RGMII_125(fsc->sc_gmac_id); + break; + case DWQE_PHY_MODE_RMII: + iface = RK3588_GMACx_PHY_INTF_SEL_RMII(fsc->sc_gmac_id); + clk = RK3588_RMII_MODE_GMACx_RMII(fsc->sc_gmac_id); + sc->sc_clk_sel_2_5 = + RK3588_MII_TX_CLK_SEL_RMII_2_5(fsc->sc_gmac_id); + sc->sc_clk_sel_25 = + RK3588_MII_TX_CLK_SEL_RMII_25(fsc->sc_gmac_id); + break; + default: + return; + } + + tx_delay = OF_getpropint(sc->sc_node, "tx_delay", 0x30); + rx_delay = OF_getpropint(sc->sc_node, "rx_delay", 0x10); + switch (sc->sc_phy_mode) { + case DWQE_PHY_MODE_RGMII_ID: + tx_delay = rx_delay = 0; + break; + case DWQE_PHY_MODE_RGMII_RXID: + rx_delay = 0; + break; + case DWQE_PHY_MODE_RGMII_TXID: + tx_delay = 0; + break; + default: + break; + } + + /* Set interface and clock. */ + regmap_write_4(php_rm, RK3588_PHP_GRF_GMAC_CON0, iface); + regmap_write_4(php_rm, RK3588_PHP_GRF_CLK_CON1, clk); + + /* Enable clock delay. */ + regmap_write_4(rm, RK3588_GRF_GMAC_CON7, + RK3588_GMACx_TXCLK_DLY_ENA(fsc->sc_gmac_id) | + RK3588_GMACx_RXCLK_DLY_ENA(fsc->sc_gmac_id)); + + /* Program clock delay lines. */ + regmap_write_4(rm, fsc->sc_gmac_id == 1 ? + RK3588_GRF_GMAC_CON9 : RK3588_GRF_GMAC_CON8, + RK3588_GMAC_CLK_TX_DL_CFG(tx_delay) | + RK3588_GMAC_CLK_RX_DL_CFG(rx_delay)); +} + +void +dwqe_mii_statchg_rk3588(struct device *self) +{ + struct dwqe_softc *sc = (void *)self; + struct ifnet *ifp = &sc->sc_ac.ac_if; + struct regmap *php_rm; + uint32_t php_grf; + uint32_t gmac_clk_sel = 0; + + dwqe_mii_statchg(self); + + php_grf = OF_getpropint(sc->sc_node, "rockchip,php-grf", 0); + php_rm = regmap_byphandle(php_grf); + if (php_rm == NULL) + return; + switch (ifp->if_baudrate) { case IF_Mbps(10): gmac_clk_sel = sc->sc_clk_sel_2_5; @@ -517,5 +632,5 @@ dwqe_mii_statchg_rk3588(struct device *self) break; } - regmap_write_4(rm, sc->sc_clk_sel, gmac_clk_sel); + regmap_write_4(php_rm, RK3588_PHP_GRF_CLK_CON1, gmac_clk_sel); } diff --git a/sys/dev/fdt/rkclock.c b/sys/dev/fdt/rkclock.c index 110c555db..3c141cfff 100644 --- a/sys/dev/fdt/rkclock.c +++ b/sys/dev/fdt/rkclock.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rkclock.c,v 1.84 2023/11/26 13:47:45 kettenis Exp $ */ +/* $OpenBSD: rkclock.c,v 1.85 2024/02/26 18:54:25 kettenis Exp $ */ /* * Copyright (c) 2017, 2018 Mark Kettenis * @@ -4107,6 +4107,11 @@ const struct rkclock rk3588_clocks[] = { { RK3588_CLK_GPU_SRC }, SET_PARENT }, + { + RK3588_CLK_GMAC_125M, RK3588_CRU_CLKSEL_CON(83), + SEL(15, 15), DIV(14, 8), + { RK3588_PLL_GPLL, RK3588_PLL_CPLL } + }, { RK3588_CCLK_SRC_SDIO, RK3588_CRU_CLKSEL_CON(172), SEL(9, 8), DIV(7, 2), @@ -4444,6 +4449,14 @@ rk3588_reset(void *cookie, uint32_t *cells, int on) uint32_t bit, mask, reg; switch (idx) { + case RK3588_SRST_A_GMAC0: + reg = RK3588_CRU_SOFTRST_CON(32); + bit = 10; + break; + case RK3588_SRST_A_GMAC1: + reg = RK3588_CRU_SOFTRST_CON(32); + bit = 11; + break; case RK3588_SRST_PCIE0_POWER_UP: reg = RK3588_CRU_SOFTRST_CON(32); bit = 13; diff --git a/sys/dev/fdt/rkclock_clocks.h b/sys/dev/fdt/rkclock_clocks.h index 67f61e703..0c9bf1b23 100644 --- a/sys/dev/fdt/rkclock_clocks.h +++ b/sys/dev/fdt/rkclock_clocks.h @@ -458,6 +458,7 @@ #define RK3588_ACLK_LOW_TOP_ROOT 258 #define RK3588_CLK_GPU_SRC 261 #define RK3588_CLK_GPU 262 +#define RK3588_CLK_GMAC_125M 310 #define RK3588_CCLK_SRC_SDIO 395 #define RK3588_ACLK_VOP_ROOT 600 #define RK3588_ACLK_VOP 605 @@ -488,6 +489,8 @@ #define RK3588_PLL_SPLL 1022 #define RK3588_XIN24M 1023 +#define RK3588_SRST_A_GMAC0 291 +#define RK3588_SRST_A_GMAC1 292 #define RK3588_SRST_PCIE0_POWER_UP 294 #define RK3588_SRST_PCIE1_POWER_UP 295 #define RK3588_SRST_PCIE2_POWER_UP 296 diff --git a/sys/dev/ic/dwqevar.h b/sys/dev/ic/dwqevar.h index c4a8f138a..d7d32b1c0 100644 --- a/sys/dev/ic/dwqevar.h +++ b/sys/dev/ic/dwqevar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: dwqevar.h,v 1.10 2023/11/11 16:50:25 stsp Exp $ */ +/* $OpenBSD: dwqevar.h,v 1.11 2024/02/26 18:57:50 kettenis Exp $ */ /* * Copyright (c) 2008, 2019 Mark Kettenis * Copyright (c) 2017, 2022 Patrick Wildt @@ -18,6 +18,7 @@ enum dwqe_phy_mode { DWQE_PHY_MODE_UNKNOWN, + DWQE_PHY_MODE_RMII, DWQE_PHY_MODE_RGMII, DWQE_PHY_MODE_RGMII_ID, DWQE_PHY_MODE_RGMII_TXID, diff --git a/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c b/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c index 61a6748a6..7901aeb4d 100644 --- a/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c +++ b/sys/dev/pci/drm/amd/amdgpu/amdgpu_device.c @@ -4249,7 +4249,6 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon) drm_fb_helper_set_suspend_unlocked(adev_to_drm(adev)->fb_helper, true); cancel_delayed_work_sync(&adev->delayed_init_work); - flush_delayed_work(&adev->gfx.gfx_off_delay_work); amdgpu_ras_suspend(adev); diff --git a/sys/dev/pci/drm/amd/amdgpu/amdgpu_gfx.c b/sys/dev/pci/drm/amd/amdgpu/amdgpu_gfx.c index a31ed41e6..435571881 100644 --- a/sys/dev/pci/drm/amd/amdgpu/amdgpu_gfx.c +++ b/sys/dev/pci/drm/amd/amdgpu/amdgpu_gfx.c @@ -704,8 +704,15 @@ void amdgpu_gfx_off_ctrl(struct amdgpu_device *adev, bool enable) if (adev->gfx.gfx_off_req_count == 0 && !adev->gfx.gfx_off_state) { - schedule_delayed_work(&adev->gfx.gfx_off_delay_work, + /* If going to s2idle, no need to wait */ + if (adev->in_s0ix) { + if (!amdgpu_dpm_set_powergating_by_smu(adev, + AMD_IP_BLOCK_TYPE_GFX, true)) + adev->gfx.gfx_off_state = true; + } else { + schedule_delayed_work(&adev->gfx.gfx_off_delay_work, delay); + } } } else { if (adev->gfx.gfx_off_req_count == 0) { diff --git a/sys/dev/pci/drm/amd/amdgpu/cik_ih.c b/sys/dev/pci/drm/amd/amdgpu/cik_ih.c index 6f7c031dd..f24e34dc3 100644 --- a/sys/dev/pci/drm/amd/amdgpu/cik_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/cik_ih.c @@ -204,6 +204,12 @@ static u32 cik_ih_get_wptr(struct amdgpu_device *adev, tmp = RREG32(mmIH_RB_CNTL); tmp |= IH_RB_CNTL__WPTR_OVERFLOW_CLEAR_MASK; WREG32(mmIH_RB_CNTL, tmp); + + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp &= ~IH_RB_CNTL__WPTR_OVERFLOW_CLEAR_MASK; + WREG32(mmIH_RB_CNTL, tmp); } return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/amdgpu/cz_ih.c b/sys/dev/pci/drm/amd/amdgpu/cz_ih.c index b8c47e0cf..c19681492 100644 --- a/sys/dev/pci/drm/amd/amdgpu/cz_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/cz_ih.c @@ -216,6 +216,11 @@ static u32 cz_ih_get_wptr(struct amdgpu_device *adev, tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32(mmIH_RB_CNTL, tmp); + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32(mmIH_RB_CNTL, tmp); out: return (wptr & ih->ptr_mask); diff --git a/sys/dev/pci/drm/amd/amdgpu/gfx_v10_0.c b/sys/dev/pci/drm/amd/amdgpu/gfx_v10_0.c index 8e9e70319..a0bf45202 100644 --- a/sys/dev/pci/drm/amd/amdgpu/gfx_v10_0.c +++ b/sys/dev/pci/drm/amd/amdgpu/gfx_v10_0.c @@ -4020,8 +4020,6 @@ static int gfx_v10_0_init_microcode(struct amdgpu_device *adev) err = 0; adev->gfx.mec2_fw = NULL; } - amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2); - amdgpu_gfx_cp_init_microcode(adev, AMDGPU_UCODE_ID_CP_MEC2_JT); gfx_v10_0_check_fw_write_wait(adev); out: diff --git a/sys/dev/pci/drm/amd/amdgpu/iceland_ih.c b/sys/dev/pci/drm/amd/amdgpu/iceland_ih.c index aecad530b..2c02ae698 100644 --- a/sys/dev/pci/drm/amd/amdgpu/iceland_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/iceland_ih.c @@ -215,6 +215,11 @@ static u32 iceland_ih_get_wptr(struct amdgpu_device *adev, tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32(mmIH_RB_CNTL, tmp); + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32(mmIH_RB_CNTL, tmp); out: return (wptr & ih->ptr_mask); diff --git a/sys/dev/pci/drm/amd/amdgpu/ih_v6_0.c b/sys/dev/pci/drm/amd/amdgpu/ih_v6_0.c index ec0c8f8b4..f432dc72d 100644 --- a/sys/dev/pci/drm/amd/amdgpu/ih_v6_0.c +++ b/sys/dev/pci/drm/amd/amdgpu/ih_v6_0.c @@ -418,6 +418,12 @@ static u32 ih_v6_0_get_wptr(struct amdgpu_device *adev, tmp = RREG32_NO_KIQ(ih_regs->ih_rb_cntl); tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); out: return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/amdgpu/ih_v6_1.c b/sys/dev/pci/drm/amd/amdgpu/ih_v6_1.c index 8fb05eae3..b8da0fc29 100644 --- a/sys/dev/pci/drm/amd/amdgpu/ih_v6_1.c +++ b/sys/dev/pci/drm/amd/amdgpu/ih_v6_1.c @@ -418,6 +418,13 @@ static u32 ih_v6_1_get_wptr(struct amdgpu_device *adev, tmp = RREG32_NO_KIQ(ih_regs->ih_rb_cntl); tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + out: return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/amdgpu/navi10_ih.c b/sys/dev/pci/drm/amd/amdgpu/navi10_ih.c index b6a8478da..737eff53f 100644 --- a/sys/dev/pci/drm/amd/amdgpu/navi10_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/navi10_ih.c @@ -442,6 +442,12 @@ static u32 navi10_ih_get_wptr(struct amdgpu_device *adev, tmp = RREG32_NO_KIQ(ih_regs->ih_rb_cntl); tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); out: return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/amdgpu/si_ih.c b/sys/dev/pci/drm/amd/amdgpu/si_ih.c index 9a24f17a5..cada9f300 100644 --- a/sys/dev/pci/drm/amd/amdgpu/si_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/si_ih.c @@ -119,6 +119,12 @@ static u32 si_ih_get_wptr(struct amdgpu_device *adev, tmp = RREG32(IH_RB_CNTL); tmp |= IH_RB_CNTL__WPTR_OVERFLOW_CLEAR_MASK; WREG32(IH_RB_CNTL, tmp); + + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp &= ~IH_RB_CNTL__WPTR_OVERFLOW_CLEAR_MASK; + WREG32(IH_RB_CNTL, tmp); } return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/amdgpu/soc21.c b/sys/dev/pci/drm/amd/amdgpu/soc21.c index 8b2ff2b28..5a77ab587 100644 --- a/sys/dev/pci/drm/amd/amdgpu/soc21.c +++ b/sys/dev/pci/drm/amd/amdgpu/soc21.c @@ -50,13 +50,13 @@ static const struct amd_ip_funcs soc21_common_ip_funcs; /* SOC21 */ static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_encode_array_vcn0[] = { {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)}, - {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)}, + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 0)}, {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, 8192, 4352, 0)}, }; static const struct amdgpu_video_codec_info vcn_4_0_0_video_codecs_encode_array_vcn1[] = { {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 2304, 0)}, - {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 4096, 2304, 0)}, + {codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 0)}, }; static const struct amdgpu_video_codecs vcn_4_0_0_video_codecs_encode_vcn0 = { diff --git a/sys/dev/pci/drm/amd/amdgpu/tonga_ih.c b/sys/dev/pci/drm/amd/amdgpu/tonga_ih.c index 917707bba..450b6e831 100644 --- a/sys/dev/pci/drm/amd/amdgpu/tonga_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/tonga_ih.c @@ -219,6 +219,12 @@ static u32 tonga_ih_get_wptr(struct amdgpu_device *adev, tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32(mmIH_RB_CNTL, tmp); + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32(mmIH_RB_CNTL, tmp); + out: return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/amdgpu/vega10_ih.c b/sys/dev/pci/drm/amd/amdgpu/vega10_ih.c index d364c6dd1..bf68e18e3 100644 --- a/sys/dev/pci/drm/amd/amdgpu/vega10_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/vega10_ih.c @@ -373,6 +373,12 @@ static u32 vega10_ih_get_wptr(struct amdgpu_device *adev, tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + out: return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/amdgpu/vega20_ih.c b/sys/dev/pci/drm/amd/amdgpu/vega20_ih.c index dbc995364..131e7b769 100644 --- a/sys/dev/pci/drm/amd/amdgpu/vega20_ih.c +++ b/sys/dev/pci/drm/amd/amdgpu/vega20_ih.c @@ -421,6 +421,12 @@ static u32 vega20_ih_get_wptr(struct amdgpu_device *adev, tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 1); WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + /* Unset the CLEAR_OVERFLOW bit immediately so new overflows + * can be detected. + */ + tmp = REG_SET_FIELD(tmp, IH_RB_CNTL, WPTR_OVERFLOW_CLEAR, 0); + WREG32_NO_KIQ(ih_regs->ih_rb_cntl, tmp); + out: return (wptr & ih->ptr_mask); } diff --git a/sys/dev/pci/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/sys/dev/pci/drm/amd/display/amdgpu_dm/amdgpu_dm.c index c4e5c6ab0..9c2833b09 100644 --- a/sys/dev/pci/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/sys/dev/pci/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -6076,7 +6076,9 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector, if (recalculate_timing) { freesync_mode = get_highest_refresh_rate_mode(aconnector, false); drm_mode_copy(&saved_mode, &mode); + saved_mode.picture_aspect_ratio = mode.picture_aspect_ratio; drm_mode_copy(&mode, freesync_mode); + mode.picture_aspect_ratio = saved_mode.picture_aspect_ratio; } else { decide_crtc_timing_for_drm_display_mode( &mode, preferred_mode, scale); @@ -10364,11 +10366,13 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev, goto fail; } - ret = compute_mst_dsc_configs_for_state(state, dm_state->context, vars); - if (ret) { - DRM_DEBUG_DRIVER("compute_mst_dsc_configs_for_state() failed\n"); - ret = -EINVAL; - goto fail; + if (dc_resource_is_dsc_encoding_supported(dc)) { + ret = compute_mst_dsc_configs_for_state(state, dm_state->context, vars); + if (ret) { + DRM_DEBUG_DRIVER("compute_mst_dsc_configs_for_state() failed\n"); + ret = -EINVAL; + goto fail; + } } ret = dm_update_mst_vcpi_slots_for_dsc(state, dm_state->context, vars); diff --git a/sys/dev/pci/drm/amd/display/dc/link/protocols/link_dp_training.c b/sys/dev/pci/drm/amd/display/dc/link/protocols/link_dp_training.c index f575fafc7..cda3f7223 100644 --- a/sys/dev/pci/drm/amd/display/dc/link/protocols/link_dp_training.c +++ b/sys/dev/pci/drm/amd/display/dc/link/protocols/link_dp_training.c @@ -517,6 +517,7 @@ enum link_training_result dp_check_link_loss_status( { enum link_training_result status = LINK_TRAINING_SUCCESS; union lane_status lane_status; + union lane_align_status_updated dpcd_lane_status_updated; uint8_t dpcd_buf[6] = {0}; uint32_t lane; @@ -532,10 +533,12 @@ enum link_training_result dp_check_link_loss_status( * check lanes status */ lane_status.raw = dp_get_nibble_at_index(&dpcd_buf[2], lane); + dpcd_lane_status_updated.raw = dpcd_buf[4]; if (!lane_status.bits.CHANNEL_EQ_DONE_0 || !lane_status.bits.CR_DONE_0 || - !lane_status.bits.SYMBOL_LOCKED_0) { + !lane_status.bits.SYMBOL_LOCKED_0 || + !dp_is_interlane_aligned(dpcd_lane_status_updated)) { /* if one of the channel equalization, clock * recovery or symbol lock is dropped * consider it as (link has been diff --git a/sys/dev/pci/drm/drm_prime.c b/sys/dev/pci/drm/drm_prime.c index d526e6104..25812a30d 100644 --- a/sys/dev/pci/drm/drm_prime.c +++ b/sys/dev/pci/drm/drm_prime.c @@ -849,7 +849,7 @@ struct sg_table *drm_prime_pages_to_sg(struct drm_device *dev, if (max_segment == 0) max_segment = UINT_MAX; err = sg_alloc_table_from_pages_segment(sg, pages, nr_pages, 0, - nr_pages << PAGE_SHIFT, + (unsigned long)nr_pages << PAGE_SHIFT, max_segment, GFP_KERNEL); if (err) { kfree(sg); diff --git a/sys/dev/pci/if_iwx.c b/sys/dev/pci/if_iwx.c index 2166d4715..a2ed6b9e6 100644 --- a/sys/dev/pci/if_iwx.c +++ b/sys/dev/pci/if_iwx.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_iwx.c,v 1.181 2024/02/16 11:44:52 stsp Exp $ */ +/* $OpenBSD: if_iwx.c,v 1.182 2024/02/26 18:00:09 stsp Exp $ */ /* * Copyright (c) 2014, 2016 genua gmbh @@ -6085,13 +6085,12 @@ iwx_tx_fill_cmd(struct iwx_softc *sc, struct iwx_node *in, } else if (sc->sc_rate_n_flags_version >= 2) rate_flags |= IWX_RATE_MCS_LEGACY_OFDM_MSK; - rval = (rs->rs_rates[ni->ni_txrate] & IEEE80211_RATE_VAL); if (sc->sc_rate_n_flags_version >= 2) { if (rate_flags & IWX_RATE_MCS_LEGACY_OFDM_MSK) { - rate_flags |= (iwx_fw_rateidx_ofdm(rval) & + rate_flags |= (iwx_fw_rateidx_ofdm(rinfo->rate) & IWX_RATE_LEGACY_RATE_MSK); } else { - rate_flags |= (iwx_fw_rateidx_cck(rval) & + rate_flags |= (iwx_fw_rateidx_cck(rinfo->rate) & IWX_RATE_LEGACY_RATE_MSK); } } else diff --git a/usr.sbin/dvmrpd/rde.c b/usr.sbin/dvmrpd/rde.c index 22081a5c2..d2defcf9b 100644 --- a/usr.sbin/dvmrpd/rde.c +++ b/usr.sbin/dvmrpd/rde.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rde.c,v 1.32 2022/12/28 21:30:16 jmc Exp $ */ +/* $OpenBSD: rde.c,v 1.33 2024/02/26 09:50:42 jsg Exp $ */ /* * Copyright (c) 2004, 2005 Claudio Jeker @@ -418,14 +418,13 @@ rde_group_list_find(struct iface *iface, struct in_addr group) void rde_group_list_remove(struct iface *iface, struct in_addr group) { - struct rde_group *rg; + struct rde_group *rg, *nrg; struct rt_node *rn; if (TAILQ_EMPTY(&iface->rde_group_list)) fatalx("rde_group_list_remove: group does not exist"); - for (rg = TAILQ_FIRST(&iface->rde_group_list); rg != NULL; - rg = TAILQ_NEXT(rg, entry)) { + TAILQ_FOREACH_SAFE(rg, &iface->rde_group_list, entry, nrg) { if (rg->rde_group.s_addr == group.s_addr) { log_debug("group_list_remove: interface %s, group %s", iface->name, inet_ntoa(rg->rde_group)); diff --git a/usr.sbin/npppd/common/addr_range.c b/usr.sbin/npppd/common/addr_range.c index 539a60fb5..d81e4b318 100644 --- a/usr.sbin/npppd/common/addr_range.c +++ b/usr.sbin/npppd/common/addr_range.c @@ -1,4 +1,4 @@ -/* $OpenBSD: addr_range.c,v 1.6 2017/05/30 17:22:00 yasuoka Exp $ */ +/* $OpenBSD: addr_range.c,v 1.7 2024/02/26 08:25:51 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. * All rights reserved. @@ -56,7 +56,7 @@ * Author: * Yasuoka Masahiko * - * $Id: addr_range.c,v 1.6 2017/05/30 17:22:00 yasuoka Exp $ + * $Id: addr_range.c,v 1.7 2024/02/26 08:25:51 yasuoka Exp $ */ #ifdef ADDR_RANGE_DEBUG #define IIJDEBUG @@ -329,8 +329,7 @@ in_addr_range_list_add(struct in_addr_range **list, const char *str) return 0; } -static int bitmask2masklen(mask) - u_int32_t mask; +static int bitmask2masklen(u_int32_t mask) { switch(mask) { case 0x00000000: return 0; diff --git a/usr.sbin/npppd/common/debugutil.c b/usr.sbin/npppd/common/debugutil.c index 7f082abdb..33c1ce325 100644 --- a/usr.sbin/npppd/common/debugutil.c +++ b/usr.sbin/npppd/common/debugutil.c @@ -1,4 +1,4 @@ -/* $OpenBSD: debugutil.c,v 1.6 2017/05/30 17:22:00 yasuoka Exp $ */ +/* $OpenBSD: debugutil.c,v 1.7 2024/02/26 08:25:51 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. * All rights reserved. @@ -90,15 +90,13 @@ set_prio_idx_init() } void -debug_set_debugfp(fp) - FILE *fp; +debug_set_debugfp(FILE *fp) { debugfp = fp; } void -debug_use_syslog(b) - int b; +debug_use_syslog(int b) { if (b) use_syslog = 1; diff --git a/usr.sbin/npppd/common/hash.c b/usr.sbin/npppd/common/hash.c index 7818b48c6..7f5faf199 100644 --- a/usr.sbin/npppd/common/hash.c +++ b/usr.sbin/npppd/common/hash.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hash.c,v 1.5 2015/12/17 08:01:55 tb Exp $ */ +/* $OpenBSD: hash.c,v 1.6 2024/02/26 08:25:51 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. * All rights reserved. @@ -36,10 +36,8 @@ * NULL. */ hash_table * -hash_create(cmp_func, hash_func, hsz) - int (*cmp_func) (const void *, const void *); - uint32_t (*hash_func) (const void *, int); - int hsz; +hash_create(int (*cmp_func) (const void *, const void *), + uint32_t (*hash_func) (const void *, int), int hsz) { hash_table *htbl; @@ -66,8 +64,7 @@ hash_create(cmp_func, hash_func, hsz) * NULL. */ hash_link * -hash_first(htbl) - hash_table *htbl; +hash_first(hash_table *htbl) { htbl->cur = 0; htbl->bucket_cur = NULL; @@ -79,8 +76,7 @@ hash_first(htbl) * NULL. */ hash_link * -hash_next(htbl) - hash_table *htbl; +hash_next(hash_table *htbl) { hash_link *hlink; @@ -105,9 +101,7 @@ hash_next(htbl) * NULL */ hash_link * -hash_lookup(htbl, k) - hash_table *htbl; - const void *k; +hash_lookup(hash_table *htbl, const void *k) { int c; hash_link *w; @@ -125,10 +119,7 @@ hash_lookup(htbl, k) * Return 0 on success. Return -1 on failure. */ int -hash_insert(htbl, k, i) - hash_table *htbl; - const void *k; - void *i; +hash_insert(hash_table *htbl, const void *k, void *i) { int c; hash_link *n; @@ -155,10 +146,7 @@ hash_insert(htbl, k, i) * on failure. */ int -hash_delete(htbl, k, memfree) - hash_table *htbl; - const void *k; - int memfree; +hash_delete(hash_table *htbl, const void *k, int memfree) { int i; hash_link *b, *w; @@ -194,9 +182,7 @@ hash_delete(htbl, k, memfree) * If memfree != 0 then free items. */ void -hash_delete_all(htbl, memfree) - hash_table *htbl; - int memfree; +hash_delete_all(hash_table *htbl, int memfree) { int i; hash_link *w, *hl; @@ -217,8 +203,7 @@ hash_delete_all(htbl, memfree) /* hash_free - Free hash table and all buckets. */ void -hash_free(htbl) - hash_table *htbl; +hash_free(hash_table *htbl) { if (htbl != NULL) { free(htbl->bucket); diff --git a/usr.sbin/npppd/common/recvfromto.c b/usr.sbin/npppd/common/recvfromto.c index fa36f5e4b..a4161b470 100644 --- a/usr.sbin/npppd/common/recvfromto.c +++ b/usr.sbin/npppd/common/recvfromto.c @@ -1,4 +1,4 @@ -/* $OpenBSD: recvfromto.c,v 1.6 2015/12/17 08:01:55 tb Exp $ */ +/* $OpenBSD: recvfromto.c,v 1.7 2024/02/26 08:25:51 yasuoka Exp $ */ /* adapted from ipsec-tools 0.6 src/racoon/sockmisc.c */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -41,18 +41,9 @@ * setsockopt() have already performed on socket. */ int -recvfromto_nat_t(s, buf, buflen, flags, from, fromlen, to, tolen, - ipsec, ipseclen) - int s; - void *buf; - size_t buflen; - int flags; - struct sockaddr *from; - u_int *fromlen; - struct sockaddr *to; - u_int *tolen; - void *ipsec; - u_int *ipseclen; +recvfromto_nat_t(int s, void *buf, size_t buflen, int flags, + struct sockaddr *from, u_int *fromlen, struct sockaddr *to, u_int *tolen, + void *ipsec, u_int *ipseclen) { int otolen; u_int oipseclen = 0; @@ -188,29 +179,16 @@ recvfromto_nat_t(s, buf, buflen, flags, from, fromlen, to, tolen, } int -recvfromto(s, buf, buflen, flags, from, fromlen, to, tolen) - int s; - void *buf; - size_t buflen; - int flags; - struct sockaddr *from; - u_int *fromlen; - struct sockaddr *to; - u_int *tolen; +recvfromto(int s, void *buf, size_t buflen, int flags, struct sockaddr *from, + u_int *fromlen, struct sockaddr *to, u_int *tolen) { return recvfromto_nat_t(s, buf, buflen, flags, from, fromlen, to, tolen, NULL, NULL); } int -sendto_nat_t(s, buf, buflen, flags, to, tolen, ipsec) - int s; - const void *buf; - size_t buflen; - int flags; - struct sockaddr *to; - u_int tolen; - void *ipsec; +sendto_nat_t(int s, const void *buf, size_t buflen, int flags, + struct sockaddr *to, u_int tolen, void *ipsec) { #ifdef IP_IPSECFLOWINFO if (ipsec) { diff --git a/usr.sbin/npppd/l2tp/l2tp.h b/usr.sbin/npppd/l2tp/l2tp.h index 8cb1777ed..b1b925c6e 100644 --- a/usr.sbin/npppd/l2tp/l2tp.h +++ b/usr.sbin/npppd/l2tp/l2tp.h @@ -1,4 +1,4 @@ -/* $OpenBSD: l2tp.h,v 1.14 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $OpenBSD: l2tp.h,v 1.15 2024/02/26 08:29:37 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -30,7 +30,7 @@ /*@file * header file for the L2TP module */ -/* $Id: l2tp.h,v 1.14 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $Id: l2tp.h,v 1.15 2024/02/26 08:29:37 yasuoka Exp $ */ /************************************************************************ * Protocol Constants @@ -405,7 +405,7 @@ typedef struct _l2tp_ctrl { /** number of calls established */ int ncalls; - int /** use sequence number in L2TP Data Message? */ + unsigned int /** use sequence number in L2TP Data Message? */ data_use_seq:1, /** waiting to acknowledge HELLO? */ hello_wait_ack:1; diff --git a/usr.sbin/npppd/npppd/chap.c b/usr.sbin/npppd/npppd/chap.c index 0d634a2bf..88c65a010 100644 --- a/usr.sbin/npppd/npppd/chap.c +++ b/usr.sbin/npppd/npppd/chap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: chap.c,v 1.17 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $OpenBSD: chap.c,v 1.18 2024/02/26 08:47:28 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -36,7 +36,7 @@ *

*/ /* RFC 1994, 2433 */ -/* $Id: chap.c,v 1.17 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $Id: chap.c,v 1.18 2024/02/26 08:47:28 yasuoka Exp $ */ #include #include #include @@ -862,6 +862,11 @@ chap_radius_response(void *context, RADIUS_PACKET *pkt, int flags, reason="bad_authenticator"; goto auth_failed; } + if ((flags & RADIUS_REQUEST_CHECK_MSG_AUTHENTICATOR_OK) == 0 && + (flags & RADIUS_REQUEST_CHECK_NO_MSG_AUTHENTICATOR) == 0) { + reason="bad_msg_authenticator"; + goto auth_failed; + } /* * Authentication OK */ diff --git a/usr.sbin/npppd/npppd/fsm.c b/usr.sbin/npppd/npppd/fsm.c index 605b7887e..c5772d8c0 100644 --- a/usr.sbin/npppd/npppd/fsm.c +++ b/usr.sbin/npppd/npppd/fsm.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fsm.c,v 1.10 2019/02/27 04:52:19 denis Exp $ */ +/* $OpenBSD: fsm.c,v 1.11 2024/02/26 08:25:51 yasuoka Exp $ */ /**@file * This file was adapted from NetBSD:/usr/src/usr.sbin/pppd/pppd/fsm.c @@ -70,7 +70,7 @@ static const char rcsid[] = RCSID; #endif static void fsm_timeout(void *); -static void fsm_rconfreq(fsm *, int, u_char *, int); +static void fsm_rconfreq(fsm *, u_char, u_char *, int len); static void fsm_rconfack(fsm *, int, u_char *, int); static void fsm_rconfnakrej(fsm *, int, int, u_char *, int); static void fsm_rtermreq(fsm *, int, u_char *, int); @@ -96,8 +96,7 @@ fsm_evtimer_timeout(int fd, short evtype, void *ctx) * Initialize fsm state. */ void -fsm_init(f) - fsm *f; +fsm_init(fsm *f) { f->state = INITIAL; f->flags = 0; @@ -116,8 +115,7 @@ fsm_init(f) * fsm_lowerup - The lower layer is up. */ void -fsm_lowerup(f) - fsm *f; +fsm_lowerup(fsm *f) { switch( f->state ){ case INITIAL: @@ -146,8 +144,7 @@ fsm_lowerup(f) * Cancel all timeouts and inform upper layers. */ void -fsm_lowerdown(f) - fsm *f; +fsm_lowerdown(fsm *f) { switch( f->state ){ case CLOSED: @@ -189,8 +186,7 @@ fsm_lowerdown(f) * fsm_open - Link is allowed to come up. */ void -fsm_open(f) - fsm *f; +fsm_open(fsm *f) { switch( f->state ){ case INITIAL: @@ -230,9 +226,7 @@ fsm_open(f) * the CLOSED state. */ void -fsm_close(f, reason) - fsm *f; - const char *reason; +fsm_close(fsm *f, const char *reason) { f->term_reason = (char *)reason; f->term_reason_len = (reason == NULL? 0: strlen(reason)); @@ -273,8 +267,7 @@ fsm_close(f, reason) * fsm_timeout - Timeout expired. */ static void -fsm_timeout(arg) - void *arg; +fsm_timeout(void *arg) { fsm *f = (fsm *) arg; @@ -326,10 +319,7 @@ fsm_timeout(arg) * fsm_input - Input packet. */ void -fsm_input(f, inpacket, l) - fsm *f; - u_char *inpacket; - int l; +fsm_input(fsm *f, u_char *inpacket, int l) { u_char *inp; u_char code, id; @@ -405,11 +395,7 @@ fsm_input(f, inpacket, l) * fsm_rconfreq - Receive Configure-Request. */ static void -fsm_rconfreq(f, id, inp, len) - fsm *f; - u_char id; - u_char *inp; - int len; +fsm_rconfreq(fsm *f, u_char id, u_char *inp, int len) { int code, reject_if_disagree; @@ -475,11 +461,7 @@ fsm_rconfreq(f, id, inp, len) * fsm_rconfack - Receive Configure-Ack. */ static void -fsm_rconfack(f, id, inp, len) - fsm *f; - int id; - u_char *inp; - int len; +fsm_rconfack(fsm *f, int id, u_char *inp, int len) { if (id != f->reqid || f->seen_ack) /* Expected id? */ return; /* Nope, toss... */ @@ -532,11 +514,7 @@ fsm_rconfack(f, id, inp, len) * fsm_rconfnakrej - Receive Configure-Nak or Configure-Reject. */ static void -fsm_rconfnakrej(f, code, id, inp, len) - fsm *f; - int code, id; - u_char *inp; - int len; +fsm_rconfnakrej(fsm *f, int code, int id, u_char *inp, int len) { int (*proc)(fsm *, u_char *, int); int ret; @@ -590,11 +568,7 @@ fsm_rconfnakrej(f, code, id, inp, len) * fsm_rtermreq - Receive Terminate-Req. */ static void -fsm_rtermreq(f, id, p, len) - fsm *f; - int id; - u_char *p; - int len; +fsm_rtermreq(fsm *f, int id, u_char *p, int len) { switch (f->state) { case ACKRCVD: @@ -620,8 +594,7 @@ fsm_rtermreq(f, id, p, len) * fsm_rtermack - Receive Terminate-Ack. */ static void -fsm_rtermack(f) - fsm *f; +fsm_rtermack(fsm *f) { switch (f->state) { case CLOSING: @@ -655,10 +628,7 @@ fsm_rtermack(f) * fsm_rcoderej - Receive an Code-Reject. */ static void -fsm_rcoderej(f, inp, len) - fsm *f; - u_char *inp; - int len; +fsm_rcoderej(fsm *f, u_char *inp, int len) { u_char code, id; @@ -683,8 +653,7 @@ fsm_rcoderej(f, inp, len) * Treat this as a catastrophic error (RXJ-). */ void -fsm_protreject(f) - fsm *f; +fsm_protreject(fsm *f) { switch( f->state ){ case CLOSING: @@ -733,9 +702,7 @@ fsm_protreject(f) * fsm_sconfreq - Send a Configure-Request. */ static void -fsm_sconfreq(f, retransmit) - fsm *f; - int retransmit; +fsm_sconfreq(fsm *f, int retransmit) { u_char *outp; int cilen; @@ -783,11 +750,7 @@ fsm_sconfreq(f, retransmit) * Used for all packets sent to our peer by this module. */ void -fsm_sdata(f, code, id, data, datalen) - fsm *f; - u_char code, id; - u_char *data; - int datalen; +fsm_sdata(fsm *f, u_char code, u_char id, u_char *data, int datalen) { ppp_output(f->ppp, f->protocol, code, id, data, datalen); } diff --git a/usr.sbin/npppd/npppd/fsm.h b/usr.sbin/npppd/npppd/fsm.h index a35b06b26..f8185644d 100644 --- a/usr.sbin/npppd/npppd/fsm.h +++ b/usr.sbin/npppd/npppd/fsm.h @@ -1,4 +1,4 @@ -/* $OpenBSD: fsm.h,v 1.6 2017/05/30 17:22:00 yasuoka Exp $ */ +/* $OpenBSD: fsm.h,v 1.7 2024/02/26 08:25:51 yasuoka Exp $ */ /* $NetBSD: fsm.h,v 1.10 2000/09/23 22:39:35 christos Exp $ */ /* @@ -158,7 +158,7 @@ void fsm_open(fsm *); void fsm_close(fsm *, const char *); void fsm_input(fsm *, u_char *, int); void fsm_protreject(fsm *); -void fsm_sdata(fsm *, int, int, u_char *, int); +void fsm_sdata(fsm *, u_char, u_char, u_char *, int); void fsm_log(fsm *, uint32_t, const char *, ...) __attribute__((__format__ (__printf__, 3, 4))); diff --git a/usr.sbin/npppd/npppd/npppd_auth.c b/usr.sbin/npppd/npppd/npppd_auth.c index 1bc3e2c72..4169eb756 100644 --- a/usr.sbin/npppd/npppd/npppd_auth.c +++ b/usr.sbin/npppd/npppd/npppd_auth.c @@ -1,4 +1,4 @@ -/* $OpenBSD: npppd_auth.c,v 1.22 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $OpenBSD: npppd_auth.c,v 1.23 2024/02/26 10:42:05 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -26,7 +26,7 @@ * SUCH DAMAGE. */ /**@file authentication realm */ -/* $Id: npppd_auth.c,v 1.22 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $Id: npppd_auth.c,v 1.23 2024/02/26 10:42:05 yasuoka Exp $ */ #include #include #include @@ -49,6 +49,7 @@ #include "net_utils.h" #include "npppd_auth_local.h" +#include "npppd_radius.h" /** * Create a npppd_auth_base object. @@ -597,6 +598,11 @@ npppd_auth_radius_reload(npppd_auth_base *base, struct authconf *auth) "server%s.", nauth, (nauth > 1)? "s" : "", nacct, (nacct > 1)? "s" : ""); + if (nacct > 0 && _this->rad_acct_on == 0) { + radius_acct_on(base->npppd, _this->rad_acct_setting); + _this->rad_acct_on = 1; + } + return 0; } diff --git a/usr.sbin/npppd/npppd/npppd_auth_local.h b/usr.sbin/npppd/npppd/npppd_auth_local.h index 2ae55d2ab..686333dc8 100644 --- a/usr.sbin/npppd/npppd/npppd_auth_local.h +++ b/usr.sbin/npppd/npppd/npppd_auth_local.h @@ -1,4 +1,4 @@ -/* $OpenBSD: npppd_auth_local.h,v 1.8 2017/08/11 16:41:47 goda Exp $ */ +/* $OpenBSD: npppd_auth_local.h,v 1.9 2024/02/26 10:42:05 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -70,6 +70,9 @@ struct _npppd_auth_radius { /** RADIUS accounting server setting */ radius_req_setting *rad_acct_setting; + + /** Whether RADIUS accounting-on is noticed */ + int rad_acct_on; }; #endif diff --git a/usr.sbin/npppd/npppd/npppd_iface.h b/usr.sbin/npppd/npppd/npppd_iface.h index 04f86dd1f..8ebf7d7bf 100644 --- a/usr.sbin/npppd/npppd/npppd_iface.h +++ b/usr.sbin/npppd/npppd/npppd_iface.h @@ -1,4 +1,4 @@ -/* $OpenBSD: npppd_iface.h,v 1.7 2015/12/05 16:10:31 yasuoka Exp $ */ +/* $OpenBSD: npppd_iface.h,v 1.8 2024/02/26 08:29:37 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -29,31 +29,31 @@ #define NPPPD_IFACE_H 1 typedef struct _npppd_iface { - /** base of npppd structure */ + /** base of npppd structure */ void *npppd; - /** interface name */ + /** interface name */ char ifname[IFNAMSIZ]; - /** file descriptor for device file */ + /** file descriptor for device file */ int devf; - /** assigned IPv4 address */ + /** assigned IPv4 address */ struct in_addr ip4addr; - /** for event(3) */ + /** for event(3) */ struct event ev; struct ipcpconf *ipcpconf; - int /** - * whether set IP address as npppd_iface's work or not. - *

if 0, npppd_iface only refers IP address already set.

- */ - set_ip4addr:1, + unsigned int /** + * whether set IP address as npppd_iface's work or not. + *

if 0, npppd_iface only refers IP address already set.

+ */ + set_ip4addr:1, /** set if using pppx(4) rather than tun(4) */ using_pppx:1, /** is initialized */ - initialized:1, + initialized:1, /** is started */ - started:1; + started:1; } npppd_iface; /** whether interface IP address is usable or not */ diff --git a/usr.sbin/npppd/npppd/npppd_local.h b/usr.sbin/npppd/npppd/npppd_local.h index 06331759e..37205b65f 100644 --- a/usr.sbin/npppd/npppd/npppd_local.h +++ b/usr.sbin/npppd/npppd/npppd_local.h @@ -1,4 +1,4 @@ -/* $OpenBSD: npppd_local.h,v 1.17 2017/08/12 11:20:34 goda Exp $ */ +/* $OpenBSD: npppd_local.h,v 1.18 2024/02/26 08:29:37 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -85,7 +85,7 @@ struct _npppd_pool { struct sockaddr_npppd *addrs; /** list of addresses dynamically allocated */ slist dyna_addrs; - int /** whether initialized or not */ + unsigned int /** whether initialized or not */ initialized:1, /** whether in use or not */ running:1; diff --git a/usr.sbin/npppd/npppd/npppd_radius.c b/usr.sbin/npppd/npppd/npppd_radius.c index d8f72e1e4..640e9a440 100644 --- a/usr.sbin/npppd/npppd/npppd_radius.c +++ b/usr.sbin/npppd/npppd/npppd_radius.c @@ -1,4 +1,4 @@ -/* $Id: npppd_radius.c,v 1.8 2015/07/23 09:04:06 yasuoka Exp $ */ +/* $Id: npppd_radius.c,v 1.10 2024/02/26 10:42:05 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. * All rights reserved. @@ -62,6 +62,7 @@ static int l2tp_put_tunnel_attributes(RADIUS_PACKET *, void *); static int pptp_put_tunnel_attributes(RADIUS_PACKET *, void *); static int radius_acct_request(npppd *, npppd_ppp *, int ); +static void radius_acct_on_cb(void *, RADIUS_PACKET *, int, RADIUS_REQUEST_CTX); static void npppd_ppp_radius_acct_reqcb(void *, RADIUS_PACKET *, int, RADIUS_REQUEST_CTX); /*********************************************************************** @@ -217,6 +218,9 @@ radius_acct_request(npppd *pppd, npppd_ppp *ppp, int stop) ATTR_INT32(RADIUS_TYPE_NAS_PORT, ppp->id); /* npppd has no physical / virtual ports in design. */ + /* RFC 2865 5.32. NAS-Identifier */ + ATTR_STR(RADIUS_TYPE_NAS_IDENTIFIER, "npppd"); + /* RFC 2865 5.31. Calling-Station-Id */ if (ppp->calling_number[0] != '\0') ATTR_STR(RADIUS_TYPE_CALLING_STATION_ID, ppp->calling_number); @@ -301,9 +305,6 @@ radius_acct_request(npppd *pppd, npppd_ppp *ppp, int stop) ppp->obytes >> 32); } - radius_set_accounting_request_authenticator(radpkt, - radius_get_server_secret(radctx)); - /* Send the request */ radius_request(radctx, radpkt); @@ -320,6 +321,54 @@ fail: return -1; } +void +radius_acct_on(npppd *pppd, radius_req_setting *rad_setting) +{ + RADIUS_REQUEST_CTX radctx = NULL; + RADIUS_PACKET *radpkt = NULL; + + if (!radius_req_setting_has_server(rad_setting)) + return; + if ((radpkt = radius_new_request_packet(RADIUS_CODE_ACCOUNTING_REQUEST)) + == NULL) + goto fail; + + if (radius_prepare(rad_setting, NULL, &radctx, radius_acct_on_cb) != 0) + goto fail; + + /* + * RFC 2865 "5.4. NAS-IP-Address" or RFC 3162 "2.1. NAS-IPv6-Address" + */ + if (radius_prepare_nas_address(rad_setting, radpkt) != 0) + goto fail; + + /* RFC 2865 "5.41. NAS-Port-Type" */ + ATTR_INT32(RADIUS_TYPE_NAS_PORT_TYPE, RADIUS_NAS_PORT_TYPE_VIRTUAL); + + /* RFC 2866 5.1. Acct-Status-Type */ + ATTR_INT32(RADIUS_TYPE_ACCT_STATUS_TYPE, RADIUS_ACCT_STATUS_TYPE_ACCT_ON); + /* RFC 2865 5.32. NAS-Identifier */ + ATTR_STR(RADIUS_TYPE_NAS_IDENTIFIER, "npppd"); + + /* Send the request */ + radius_request(radctx, radpkt); + + return; + fail: + if (radctx != NULL) + radius_cancel_request(radctx); + if (radpkt != NULL) + radius_delete_packet(radpkt); +} + +static void +radius_acct_on_cb(void *context, RADIUS_PACKET *pkt, int flags, + RADIUS_REQUEST_CTX ctx) +{ + if ((flags & (RADIUS_REQUEST_TIMEOUT | RADIUS_REQUEST_ERROR)) != 0) + radius_request_failover(ctx); +} + #ifdef USE_NPPPD_PPTP #include "pptp.h" #endif diff --git a/usr.sbin/npppd/npppd/npppd_radius.h b/usr.sbin/npppd/npppd/npppd_radius.h index e9b7d7436..a1334545e 100644 --- a/usr.sbin/npppd/npppd/npppd_radius.h +++ b/usr.sbin/npppd/npppd/npppd_radius.h @@ -9,6 +9,7 @@ void ppp_proccess_radius_framed_ip (npppd_ppp *, RADIUS_PACKET *); int ppp_set_radius_attrs_for_authreq (npppd_ppp *, radius_req_setting *, RADIUS_PACKET *); void npppd_ppp_radius_acct_start (npppd *, npppd_ppp *); void npppd_ppp_radius_acct_stop (npppd *, npppd_ppp *); +void radius_acct_on(npppd *, radius_req_setting *); #ifdef __cplusplus } diff --git a/usr.sbin/npppd/npppd/pap.c b/usr.sbin/npppd/npppd/pap.c index 5aa55e373..b9b2f334f 100644 --- a/usr.sbin/npppd/npppd/pap.c +++ b/usr.sbin/npppd/npppd/pap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pap.c,v 1.12 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $OpenBSD: pap.c,v 1.13 2024/02/26 08:47:28 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -/* $Id: pap.c,v 1.12 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $Id: pap.c,v 1.13 2024/02/26 08:47:28 yasuoka Exp $ */ /**@file * This file provides Password Authentication Protocol (PAP) handlers. * @author Yasuoka Masahiko @@ -501,6 +501,11 @@ pap_radius_response(void *context, RADIUS_PACKET *pkt, int flags, reason="bad_authenticator"; goto auth_failed; } + if ((flags & RADIUS_REQUEST_CHECK_MSG_AUTHENTICATOR_OK) == 0 && + (flags & RADIUS_REQUEST_CHECK_NO_MSG_AUTHENTICATOR) == 0) { + reason="bad_authenticator"; + goto auth_failed; + } /* Authentication succeeded */ pap_response(_this, 1, DEFAULT_SUCCESS_MESSAGE); ppp_process_radius_framed_ip(_this->ppp, pkt); diff --git a/usr.sbin/npppd/npppd/ppp.c b/usr.sbin/npppd/npppd/ppp.c index 7fedb53ac..64716acc9 100644 --- a/usr.sbin/npppd/npppd/ppp.c +++ b/usr.sbin/npppd/npppd/ppp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ppp.c,v 1.30 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $OpenBSD: ppp.c,v 1.31 2024/02/26 10:42:05 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -/* $Id: ppp.c,v 1.30 2021/03/29 03:54:39 yasuoka Exp $ */ +/* $Id: ppp.c,v 1.31 2024/02/26 10:42:05 yasuoka Exp $ */ /**@file * This file provides PPP(Point-to-Point Protocol, RFC 1661) and * {@link :: _npppd_ppp PPP instance} related functions. @@ -1094,6 +1094,11 @@ ppp_set_radius_attrs_for_authreq(npppd_ppp *_this, if (radius_prepare_nas_address(rad_setting, radpkt) != 0) goto fail; + /* RFC 2865 5.32. NAS-Identifier */ + if (radius_put_string_attr(radpkt, RADIUS_TYPE_NAS_IDENTIFIER, "npppd") + != 0) + goto fail; + /* RFC 2865 "5.6. Service-Type" */ if (radius_put_uint32_attr(radpkt, RADIUS_TYPE_SERVICE_TYPE, RADIUS_SERVICE_TYPE_FRAMED) != 0) diff --git a/usr.sbin/npppd/npppd/radius_req.c b/usr.sbin/npppd/npppd/radius_req.c index b60ac79ac..de6edf2b0 100644 --- a/usr.sbin/npppd/npppd/radius_req.c +++ b/usr.sbin/npppd/npppd/radius_req.c @@ -1,4 +1,4 @@ -/* $OpenBSD: radius_req.c,v 1.11 2015/12/05 18:43:36 mmcc Exp $ */ +/* $OpenBSD: radius_req.c,v 1.12 2024/02/26 08:47:28 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -28,7 +28,7 @@ /**@file * This file provides functions for RADIUS request using radius(3) and event(3). * @author Yasuoka Masahiko - * $Id: radius_req.c,v 1.11 2015/12/05 18:43:36 mmcc Exp $ + * $Id: radius_req.c,v 1.12 2024/02/26 08:47:28 yasuoka Exp $ */ #include #include @@ -68,7 +68,7 @@ struct overlapped { radius_req_setting *setting; }; -static int radius_request0 (struct overlapped *, int); +static int radius_request0(struct overlapped *); static int radius_prepare_socket(struct overlapped *); static void radius_request_io_event (int, short, void *); static void radius_on_response(RADIUS_REQUEST_CTX, RADIUS_PACKET *, int, int); @@ -107,7 +107,7 @@ radius_request(RADIUS_REQUEST_CTX ctx, RADIUS_PACKET *pkt) if (radius_get_uint32_attr(pkt, RADIUS_TYPE_ACCT_DELAY_TIME, &ival) == 0) lap->acct_delay_time = 1; - radius_request0(lap, 0); + radius_request0(lap); } /** @@ -207,7 +207,7 @@ radius_request_failover(RADIUS_REQUEST_CTX ctx) if (radius_prepare_socket(lap) != 0) return -1; - if (radius_request0(lap, 1) != 0) + if (radius_request0(lap) != 0) return -1; lap->failovers++; @@ -359,7 +359,7 @@ radius_get_server_address(RADIUS_REQUEST_CTX ctx) } static int -radius_request0(struct overlapped *lap, int new_message) +radius_request0(struct overlapped *lap) { struct timeval tv0; @@ -378,16 +378,16 @@ radius_request0(struct overlapped *lap, int new_message) else { timespecsub(&curr, &lap->req_time, &delta); if (radius_set_uint32_attr(lap->pkt, - RADIUS_TYPE_ACCT_DELAY_TIME, delta.tv_sec) == 0) { + RADIUS_TYPE_ACCT_DELAY_TIME, delta.tv_sec) == 0) radius_update_id(lap->pkt); - new_message = 1; - } } } - if (new_message) { + if (radius_get_code(lap->pkt) == RADIUS_CODE_ACCOUNTING_REQUEST) radius_set_accounting_request_authenticator(lap->pkt, radius_get_server_secret(lap)); - } + else + radius_put_message_authenticator(lap->pkt, + radius_get_server_secret(lap)); lap->ntry--; if (radius_send(lap->socket, lap->pkt, 0) != 0) { @@ -440,12 +440,17 @@ radius_request_io_event(int fd, short evmask, void *context) } flags |= RADIUS_REQUEST_ERROR; } else if (lap->secret[0] == '\0') { - flags |= RADIUS_REQUEST_CHECK_AUTHENTICATOR_NO_CHECK; + flags |= RADIUS_REQUEST_CHECK_AUTHENTICATOR_NO_CHECK + | RADIUS_REQUEST_CHECK_MSG_AUTHENTICATOR_NO_CHECK; } else { radius_set_request_packet(respkt, lap->pkt); if (!radius_check_response_authenticator(respkt, lap->secret)) flags |= RADIUS_REQUEST_CHECK_AUTHENTICATOR_OK; + if (!radius_has_attr(respkt, RADIUS_TYPE_MESSAGE_AUTHENTICATOR)) + flags |= RADIUS_REQUEST_CHECK_NO_MSG_AUTHENTICATOR; + else if (radius_check_message_authenticator(respkt, lap->secret) == 0) + flags |= RADIUS_REQUEST_CHECK_MSG_AUTHENTICATOR_OK; } radius_on_response(lap, respkt, flags, 0); radius_delete_packet(respkt); @@ -453,7 +458,7 @@ radius_request_io_event(int fd, short evmask, void *context) if (lap->ntry > 0) { RADIUS_REQ_DBG((LOG_DEBUG, "%s() timed out retry", __func__)); - radius_request0(lap, 0); + radius_request0(lap); return; } RADIUS_REQ_DBG((LOG_DEBUG, "%s() timed out", __func__)); diff --git a/usr.sbin/npppd/npppd/radius_req.h b/usr.sbin/npppd/npppd/radius_req.h index bd4dd0aa5..4287c172f 100644 --- a/usr.sbin/npppd/npppd/radius_req.h +++ b/usr.sbin/npppd/npppd/radius_req.h @@ -1,4 +1,4 @@ -/* $OpenBSD: radius_req.h,v 1.7 2015/07/23 09:04:06 yasuoka Exp $ */ +/* $OpenBSD: radius_req.h,v 1.8 2024/02/26 08:47:28 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -51,6 +51,15 @@ /** authenticator is not checked */ #define RADIUS_REQUEST_CHECK_AUTHENTICATOR_NO_CHECK 0x0020 +/** no message authenticator */ +#define RADIUS_REQUEST_CHECK_NO_MSG_AUTHENTICATOR 0x0040 + +/** has valid message authenticator */ +#define RADIUS_REQUEST_CHECK_MSG_AUTHENTICATOR_OK 0x0080 + +/** message authenticator is not checked*/ +#define RADIUS_REQUEST_CHECK_MSG_AUTHENTICATOR_NO_CHECK 0x0100 + /** type for context to handle RADIUS request / response */ typedef void * RADIUS_REQUEST_CTX; diff --git a/usr.sbin/npppd/pptp/pptp.h b/usr.sbin/npppd/pptp/pptp.h index e8df825f1..275da34f5 100644 --- a/usr.sbin/npppd/pptp/pptp.h +++ b/usr.sbin/npppd/pptp/pptp.h @@ -1,4 +1,4 @@ -/* $OpenBSD: pptp.h,v 1.11 2021/03/29 03:54:40 yasuoka Exp $ */ +/* $OpenBSD: pptp.h,v 1.12 2024/02/26 08:29:37 yasuoka Exp $ */ /*- * Copyright (c) 2009 Internet Initiative Japan Inc. @@ -288,7 +288,7 @@ typedef struct _pptp_ctrl { time_t last_rcv_ctrl; /* timestamp of latest ctrl message received */ uint32_t echo_seq; /* identifier of Echo Request */ - int16_t /* flags : processing I/O events */ + uint16_t /* flags : processing I/O events */ on_io_event:1, reserved:15; } pptp_ctrl; diff --git a/usr.sbin/rpki-client/extern.h b/usr.sbin/rpki-client/extern.h index ebaede115..a27dd2123 100644 --- a/usr.sbin/rpki-client/extern.h +++ b/usr.sbin/rpki-client/extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: extern.h,v 1.209 2024/02/22 21:00:26 tb Exp $ */ +/* $OpenBSD: extern.h,v 1.210 2024/02/26 15:40:33 job Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons * @@ -622,6 +622,7 @@ struct repostats { uint32_t extra_files; /* number of superfluous files */ uint32_t del_extra_files;/* number of removed extra files */ uint32_t del_dirs; /* number of dirs removed in cleanup */ + uint32_t new_files; /* moved from DIR_TEMP to DIR_VALID */ struct timespec sync_time; /* time to sync repo */ }; @@ -850,6 +851,7 @@ struct repo *repo_byid(unsigned int); int repo_queued(struct repo *, struct entity *); void repo_cleanup(struct filepath_tree *, int); int repo_check_timeout(int); +void repostats_new_files_inc(struct repo *, const char *); void repo_stat_inc(struct repo *, int, enum rtype, enum stype); void repo_tal_stats_collect(void (*)(const struct repo *, const struct repotalstats *, void *), int, void *); diff --git a/usr.sbin/rpki-client/main.c b/usr.sbin/rpki-client/main.c index 933494a25..231ddd821 100644 --- a/usr.sbin/rpki-client/main.c +++ b/usr.sbin/rpki-client/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.251 2024/02/22 12:49:42 job Exp $ */ +/* $OpenBSD: main.c,v 1.252 2024/02/26 15:40:33 job Exp $ */ /* * Copyright (c) 2021 Claudio Jeker * Copyright (c) 2019 Kristaps Dzonsons @@ -597,6 +597,7 @@ entity_process(struct ibuf *b, struct stats *st, struct vrp_tree *tree, rp = repo_byid(id); repo_stat_inc(rp, talid, type, STYPE_OK); + repostats_new_files_inc(rp, file); switch (type) { case RTYPE_TAL: st->tals++; @@ -786,6 +787,7 @@ sum_repostats(const struct repo *rp, const struct repostats *in, void *arg) out->extra_files += in->extra_files; out->del_extra_files += in->del_extra_files; out->del_dirs += in->del_dirs; + out->new_files += in->new_files; timespecadd(&in->sync_time, &out->sync_time, &out->sync_time); } @@ -1487,6 +1489,8 @@ main(int argc, char *argv[]) printf("Ghostbuster records: %u\n", stats.repo_tal_stats.gbrs); printf("Trust Anchor Keys: %u\n", stats.repo_tal_stats.taks); printf("Repositories: %u\n", stats.repos); + printf("New files moved into validated cache: %u\n", + stats.repo_stats.new_files); printf("Cleanup: removed %u files, %u directories\n" "Repository cleanup: kept %u and removed %u superfluous files\n", stats.repo_stats.del_files, stats.repo_stats.del_dirs, diff --git a/usr.sbin/rpki-client/output-json.c b/usr.sbin/rpki-client/output-json.c index 8ff1e7f62..f19a49c5e 100644 --- a/usr.sbin/rpki-client/output-json.c +++ b/usr.sbin/rpki-client/output-json.c @@ -1,4 +1,4 @@ -/* $OpenBSD: output-json.c,v 1.43 2024/02/22 12:49:42 job Exp $ */ +/* $OpenBSD: output-json.c,v 1.44 2024/02/26 15:40:33 job Exp $ */ /* * Copyright (c) 2019 Claudio Jeker * @@ -76,6 +76,7 @@ outputheader_json(struct stats *st) json_do_int("uniquevsps", st->repo_tal_stats.vsps_uniqs); json_do_int("vaps", st->repo_tal_stats.vaps); json_do_int("uniquevaps", st->repo_tal_stats.vaps_uniqs); + json_do_int("cachedir_new_files", st->repo_stats.new_files); json_do_int("cachedir_del_files", st->repo_stats.del_files); json_do_int("cachedir_del_dirs", st->repo_stats.del_dirs); json_do_int("cachedir_superfluous_files", st->repo_stats.extra_files); diff --git a/usr.sbin/rpki-client/output-ometric.c b/usr.sbin/rpki-client/output-ometric.c index b2775e159..c6d9f5869 100644 --- a/usr.sbin/rpki-client/output-ometric.c +++ b/usr.sbin/rpki-client/output-ometric.c @@ -1,4 +1,4 @@ -/* $OpenBSD: output-ometric.c,v 1.8 2024/02/22 12:49:42 job Exp $ */ +/* $OpenBSD: output-ometric.c,v 1.9 2024/02/26 15:40:33 job Exp $ */ /* * Copyright (c) 2022 Claudio Jeker * @@ -141,6 +141,8 @@ repo_stats(const struct repo *rp, const struct repostats *in, void *arg) ol = olabels_new(keys, values); ometric_set_timespec(rpki_repo_duration, &in->sync_time, ol); + ometric_set_int_with_labels(rpki_repo_obj, in->new_files, + OKV("type", "state"), OKV("files", "new"), ol); ometric_set_int_with_labels(rpki_repo_obj, in->del_files, OKV("type", "state"), OKV("files", "deleted"), ol); ometric_set_int_with_labels(rpki_repo_obj, in->extra_files, diff --git a/usr.sbin/rpki-client/print.c b/usr.sbin/rpki-client/print.c index bb92910c1..9ef44b736 100644 --- a/usr.sbin/rpki-client/print.c +++ b/usr.sbin/rpki-client/print.c @@ -1,4 +1,4 @@ -/* $OpenBSD: print.c,v 1.51 2024/02/22 19:29:55 tb Exp $ */ +/* $OpenBSD: print.c,v 1.52 2024/02/26 10:02:37 job Exp $ */ /* * Copyright (c) 2021 Claudio Jeker * Copyright (c) 2019 Kristaps Dzonsons @@ -734,6 +734,7 @@ takey_print(char *name, const struct takey *t) json_do_string("uri", t->uris[i]); json_do_end(); json_do_string("spki", spki); + json_do_end(); } else { printf("TAL derived from the '%s' Trust Anchor Key:\n\n", name); diff --git a/usr.sbin/rpki-client/repo.c b/usr.sbin/rpki-client/repo.c index 60354de7f..77967f4ac 100644 --- a/usr.sbin/rpki-client/repo.c +++ b/usr.sbin/rpki-client/repo.c @@ -1,4 +1,4 @@ -/* $OpenBSD: repo.c,v 1.53 2024/02/22 12:49:42 job Exp $ */ +/* $OpenBSD: repo.c,v 1.54 2024/02/26 15:40:33 job Exp $ */ /* * Copyright (c) 2021 Claudio Jeker * Copyright (c) 2019 Kristaps Dzonsons @@ -1403,6 +1403,18 @@ repo_check_timeout(int timeout) return timeout; } +/* + * Update repo-specific stats when files are going to be moved + * from DIR_TEMP to DIR_VALID. + */ +void +repostats_new_files_inc(struct repo *rp, const char *file) +{ + if (strncmp(file, ".rsync/", strlen(".rsync/")) == 0 || + strncmp(file, ".rrdp/", strlen(".rrdp/")) == 0) + rp->repostats.new_files++; +} + /* * Update stats object of repository depending on rtype and subtype. */ diff --git a/usr.sbin/rpki-client/rsync.c b/usr.sbin/rpki-client/rsync.c index 808a9207a..ca838e08f 100644 --- a/usr.sbin/rpki-client/rsync.c +++ b/usr.sbin/rpki-client/rsync.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rsync.c,v 1.48 2023/11/24 14:05:47 job Exp $ */ +/* $OpenBSD: rsync.c,v 1.49 2024/02/26 20:37:27 job Exp $ */ /* * Copyright (c) 2019 Kristaps Dzonsons * @@ -159,6 +159,7 @@ exec_rsync(const char *prog, const char *bind_addr, char *uri, char *dst, args[i++] = "--include=*.roa"; args[i++] = "--include=*.asa"; args[i++] = "--include=*.tak"; + args[i++] = "--include=*.spl"; args[i++] = "--exclude=*"; if (bind_addr != NULL) { args[i++] = "--address"; diff --git a/usr.sbin/tcpdump/tcpdump.8 b/usr.sbin/tcpdump/tcpdump.8 index e457cf375..d89a056c3 100644 --- a/usr.sbin/tcpdump/tcpdump.8 +++ b/usr.sbin/tcpdump/tcpdump.8 @@ -1,4 +1,4 @@ -.\" $OpenBSD: tcpdump.8,v 1.115 2023/04/12 09:55:22 jsg Exp $ +.\" $OpenBSD: tcpdump.8,v 1.116 2024/02/26 06:49:38 jmc Exp $ .\" .\" Copyright (c) 1987, 1988, 1989, 1990, 1991, 1992, 1994, 1995, 1996 .\" The Regents of the University of California. All rights reserved. @@ -19,7 +19,7 @@ .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" -.Dd $Mdocdate: April 12 2023 $ +.Dd $Mdocdate: February 26 2024 $ .Dt TCPDUMP 8 .Os .Sh NAME @@ -958,7 +958,7 @@ and frame subtype matches the specified If the specified .Ar wlan_type is -.Cm mgtv , +.Cm mgt , then valid values for .Ar wlan_subtype are