net: l2: ppp: act on a received Protocol-Reject - #1
Open
ShahriarAhnaf wants to merge 455 commits into
Open
Conversation
The FIFO decoder mapped the SLAVEn tag index directly onto the compile-time sensor hub list, ignoring the runtime detected-device mapping (shub_ext), so frames were decoded as the wrong channel when a compiled-in external sensor was not populated. Carry shub_ext and num_ext_dev in the FIFO header and index through them, and fix the off-by-one bounds check in lsm6dsv16x_shub_type(). Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org> Assisted-by: Claude:fable-5
On sensor_clock_get_cycles() failure, the submit-sample path called rtio_iodev_sqe_err() and then jumped to the shared err label, which called rtio_iodev_sqe_err() again on the same (already freed) SQE. Drop the first call so the err block performs the single completion. Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org> Assisted-by: Claude:fable-5
The streaming path wrote full interrupt-route structs containing only its own bit, so arming the DRDY stream trigger cleared the FIFO watermark/full routing and vice versa, silently losing events when both are requested. Read-modify-write the route as the trigger path already does. Also honor the trigger disable flag in the DRDY path, which unconditionally enabled the route even when asked to disable it. Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org> Assisted-by: Claude:fable-5
This commit updates the usage of ring_buf to utilize the new put_ptr/commit/get_ptr/consume pattern instead of the traditional claim/finish approach. This change is part of a larger refactor aimed at streamlining the ring_buf API and improving its efficiency. Signed-off-by: Måns Ansgariusson <mansgariusson@gmail.com>
Migrate the SSH transport TX path off the deprecated claim/finish API to the new _ptr/commit/consume pattern. Signed-off-by: Måns Ansgariusson <mansgariusson@gmail.com>
This commit updates the usage of ring_buf to utilize the new put_ptr/commit/get_ptr/consume pattern instead of the traditional claim/finish approach. This change is part of a larger refactor aimed at streamlining the ring_buf API and improving its efficiency. Signed-off-by: Måns Ansgariusson <mansgariusson@gmail.com>
This commit updates the usage of ring_buf to utilize the new put_ptr/commit/get_ptr/consume pattern instead of the traditional claim/finish approach. This change is part of a larger refactor aimed at streamlining the ring_buf API and improving its efficiency. Signed-off-by: Måns Ansgariusson <mansgariusson@gmail.com>
This commit updates the usage of ring_buf to utilize the new put_ptr/commit/get_ptr/consume pattern instead of the traditional claim/finish approach. This change is part of a larger refactor aimed at streamlining the ring_buf API and improving its efficiency. Signed-off-by: Måns Ansgariusson <mansgariusson@gmail.com>
This commit updates the usage of ring_buf to utilize the new put_ptr/commit/get_ptr/consume pattern instead of the traditional claim/finish approach. This change is part of a larger refactor aimed at streamlining the ring_buf API and improving its efficiency. Signed-off-by: Måns Ansgariusson <mansgariusson@gmail.com>
This commit updates the usage of ring_buf to utilize the new put_ptr/commit/get_ptr/consume pattern instead of the traditional claim/finish approach. This change is part of a larger refactor aimed at streamlining the ring_buf API and improving its efficiency. Signed-off-by: Måns Ansgariusson <mansgariusson@gmail.com>
From v2.3.0. Signed-off-by: Tomi Fontanilles <tomi.fontanilles@nordicsemi.no>
From v2.3.0. Signed-off-by: Tomi Fontanilles <tomi.fontanilles@nordicsemi.no>
In conjunction with the TF-M 2.3.1 update. Signed-off-by: Tomi Fontanilles <tomi.fontanilles@nordicsemi.no>
From v2.3.0 to v2.3.1. Signed-off-by: Tomi Fontanilles <tomi.fontanilles@nordicsemi.no>
The ep->unicast_group was never assigned and thus has_been_connected was never set for the BAP unicast groups. Change to use the stream->group instead. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Remove the unused references to the unicast group and broadcast source. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Add the CIG parameters of the unicast group (SDU intervals, transport latencies, framing, packing and, when CONFIG_BT_ISO_TEST_PARAMS is enabled, the flush timeouts and the ISO interval) as well as the has_been_connected state to struct bt_bap_unicast_group_info, so that applications can retrieve all relevant information about a group. The framing is stored internally using the ISO values, and is converted back to the BAP QoS configuration values when reported. The existing bsim tests for bt_bap_unicast_group_get_info have been expanded to verify the new values, including for a group with asymmetric parameters and for a reconfigured group. Assisted-by: Copilot coding agent Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
bt_bap_unicast_group_info has new fields. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
bt_bap_unicast_group_reconfig did not properly set the fields related to CONFIG_BT_ISO_TEST_PARAMS nor packing. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
Move the responder role check outside the is_bip_primary_connect() conditional so it applies to all connection types. Remove the initiator role check from the secondary path since a responder role is valid for secondary connections initiated by the remote device. This ensures that a BIP instance configured as responder cannot initiate any client connections, regardless of connection type. Signed-off-by: Cheng Chang <cheng.chang@nxp.com>
…ress The BIS data path setup event read the advertising address directly from the host-internal bt_le_ext_adv structure. Use the public API instead. Assisted-by: Claude:claude-opus-5 Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
bt_le_ext_adv_get_info() handed out a pointer to the advertising set's random_addr, which is only written when a per-set random address is programmed. When the set advertises with a public identity address the reported address was never populated, and with a controller without the extended advertising feature it was never written at all. Instead of adding a second address field alongside random_addr, widen the meaning of the existing one: rename it to adv_addr, the address the set advertises with regardless of type. The per-set random address cases keep being updated in bt_id_set_adv_random_addr(), so the reported address stays correct across RPA and NRPA rotation, and le_update_private_addr() refreshes the legacy advertiser, which advertises with the device-wide random address. The cases that do not program a per-set address - a public identity address, and the device-wide random address on controllers without the extended advertising feature, e.g. an RPA set through bt_id_set_private_addr() when privacy is enabled - are saved by a new bt_id_save_adv_addr(), which the advertising parameter setting calls once the controller has accepted the parameters. Saving only at that point ensures a failed parameter update does not overwrite the reported address with one the controller never took into use. Widening the field is safe for the existing readers: the connection responder address and OOB paths that read it only execute in configurations where the set advertises with a random address, in which case the value is unchanged, and a pending random address is programmed from the field before bt_id_save_adv_addr() runs. For the BT_HCI_OWN_ADDR_RPA_OR_* types the controller substitutes a locally generated RPA whenever the peer is in the resolving list, which the host cannot observe; the configured fallback address is reported in that case, as documented on the info struct. Fixes: zephyrproject-rtos#112667 Assisted-by: Claude:claude-fable-5 Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
Add a unit test suite for bt_id_save_adv_addr(), covering the public identity address types, the device-wide random address fallback on a controller without the extended advertising feature - including an RPA set through bt_id_set_private_addr() when privacy is enabled - and that a per-set random address is left untouched. Also extend the legacy branch test of bt_id_set_adv_random_addr() to assert the saved address, not just the return value. Assisted-by: Claude:claude-opus-5 Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
The kit_pse84_eval low-power comparator loopback test drives the comparator in ULP mode against the local VREF with hysteresis disabled. On some boards the slow ULP comparator glitches as the GPIO loopback edge crosses VREF, latching a spurious falling-edge event and failing test_trigger_falling_edge_pending. Enable hysteresis to reject the near-threshold glitches. Assisted-by: AI (GitHub Copilot) Signed-off-by: Bill Waters <bill.waters@infineon.com>
i2c_baudrate_calc() clamps BAUD to its maximum when the requested bitrate cannot be reached and reports success. On this board with a 72 MHz SERCOM core clock, a node asking for 100 kHz got 137.1 kHz, measured with a logic analyzer. The same branch catches the unsigned subtraction wrapping, which it does for any reference clock below roughly 12 times the bitrate: a 1 MHz reference asked for 400 kHz produces 1.9 kHz. Both directions are now an error rather than a silent substitution. Clamping downwards is left alone - a slower bus is always within spec. The subtraction is guarded instead of being checked after the fact, so the two directions are told apart before BAUD is computed. Every bitrate the reference clock is too slow to reach now fails in one place, the clamped ones included, and a bitrate too slow for the register keeps failing as before. Both speed ranges run the same two tests with their own limits. Reachable bitrates keep the BAUD values they had; the clamps are no loss either, since each produced exactly the registers that the smallest valid BAUD of its range produces. The refusal reaches the caller as -EINVAL rather than -EIO: a configuration that cannot be satisfied is not a transfer failure, and a caller that retries on -EIO would otherwise retry forever. The other -EIO in the function is left alone - a reference clock that reads back as zero really is a failure to talk to the hardware. Signed-off-by: Arkadiusz Grzelka <devitwise@gmail.com>
Moves to the mapped partition binding as fixed partitions for bootable slots is being deprecated Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
Moves to the mapped partition binding as fixed partitions for bootable slots is being deprecated Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
Moves to the mapped partition binding as fixed partitions for bootable slots is being deprecated Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
Moves to the mapped partition binding as fixed partitions for bootable slots is being deprecated Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
Moves to the mapped partition binding as fixed partitions for bootable slots is being deprecated Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
Add the esp32c61_devkitc board: an entry-level board carrying a wroom-1 n8r2 module with 8 MB flash and 2 MB psram. The board devicetree enables uart, gpio, spi, i2c, watchdog and entropy; further peripherals are exercised through the driver test overlays. Board documentation and the soc features page are included, along with openocd support. Assisted-by: Claude:opus-4-8 Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
Add esp32c61 overlays for the counter, spi loopback, adc, pwm, dma loop transfer and gpio basic api driver tests, and mark the features as supported on the esp32c61 devkitc board. All suites pass on hardware; the spi and dma tests run in dma mode, and the gpio port loopback suite needs gpio4 jumpered to gpio5. Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
Add the wakeup pin overlay and disable retained memory, which the chip does not provide, so the sample builds and runs. Assisted-by: Claude:opus-4-8 Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
The counter alarm sample resolves the espressif counter node through the driver Kconfig, but no soc overlay enabled the timer on the esp32c61, so the build failed with no counter device found. Add the overlay enabling timer0 and its counter child, matching the other espressif socs. Assisted-by: Claude:opus-4-8 Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
The path to STM32_Programmer_CLI inside the STM32CubeProgrammer macOS app has changed between versions. Remove the architecture based guess and instead check both subdirectories for existence. Update the test accordingly. Link: 21d3ec1 Link: d8d90c0 Signed-off-by: Mayank Chadha <mayankchadha1998@gmail.com>
memcpy does not take NULL pointers, so in the case that dataptr is NULL, even if length is 0, we should omit the call. Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
The CMake build system targets `flash`, `debug`, `debugserver`, `attach` and `rtt` were deprecated in Zephyr 4.3 and are removed here as part of the 4.5 deprecation removal cycle. They were thin wrappers that shelled out to the corresponding west command, so users must now call `west flash`, `west debug`, `west debugserver`, `west attach` and `west rtt` directly. Note that `west build -t <target>` and `ninja <target>` are the same mechanism, so both spellings are affected. The generator loop was the only consumer of the `WEST_DIR` lookup and of cmake/flash/check_runner_dependencies.cmake, so both are removed as well. The runners.yaml generation in cmake/flash/CMakeLists.txt is kept: it is what the west commands read, and it is also included directly by the Nordic UICR helper projects. The `run`, `run_<emulator>` and emulation `debugserver` targets are provided by cmake/emu and are not affected. Documentation that told users to run `ninja flash`, `ninja debug` or `ninja attach` is updated to the equivalent west command, and the zephyr-app-commands directive now rejects the removed goals when the cmake tool is selected, so the docs cannot regress. The now-unused RUNNERS_DEPS variable and the check_runner_dependencies.cmake helper, which only existed to serve those targets, are removed as well. Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org> Assisted-by: Claude:opus-5
Since recover-bus-on-init DT property if of boolean type, use of dt_compat_any_has_prop() without an explicit value argument of True makes that function to always return true and CONFIG_I2C_MCUX_LPI2C_BUS_RECOVERY and CONFIG_I2C_MCUX_FLEXCOMM_BUS_RECOVERY configuration options always enabled (when their dependencies are met). Set function argument value to True to get the expected behavior. Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
The dai_config_set()/dai_config_update() syscall verifiers copied the user-space bespoke configuration blob into a fixed stack buffer of CONFIG_DAI_MAX_BESPOKE_CFG_SIZE bytes and rejected anything larger with -EINVAL. This turns out to be too limiting and we need to support larger configuration objects. Decouple the stack buffer size from the maximum allowed blob size and change implementation such that objects up to DAI_BESPOKE_CFG_STACK_SIZE are validated on the stack as before, but for larger objects, k_malloc'ed kernel buffer is used instead. Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Use newly added support for min-len/max-len Introduced by zephyrproject-rtos#109854 Signed-off-by: Kyle Micallef Bonnici <kyle.bonnici@nordicsemi.no>
Add stites-infineon as a collaborator for the Infineon Platform and the hal_infineon west project. This user is part of Infineon's Zephr Integration team and has been contributing driver updates for new and existing Infineon devices. Signed-off-by: Zayne Stites <Zayne.Stites@infineon.com>
The <zephyr/mgmt/hawkbit.h> redirect header was deprecated in Zephyr 4.0 when the hawkBit API was split into per-topic headers, and has emitted a window. Include <zephyr/mgmt/hawkbit/hawkbit.h>, <zephyr/mgmt/hawkbit/config.h> and <zephyr/mgmt/hawkbit/autohandler.h> directly instead. Nothing in-tree still used the old path. Also drop the now-stale MAINTAINERS.yml entry for the removed header; the hawkBit area's directory glob covers the per-topic headers. Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org> Assisted-by: Claude:fable-5
The functions uart_silabs_ll2cfg_*() have never been used. Probably the original author wrote them for the completeness since their uart_silabs_cfg2ll counterparts were required. Orphan function generate warning that could in turn generate error with -Werror. Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
The functions eusart_silabs_ll2cfg_*() have never been used. Probably the original author wrote them for the completeness since their eusart_silabs_cfg2ll counterparts were required. Orphan function generate warning that could in turn generate error with -Werror. Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
Enable FlexComm2 as I2C and add the NXP MMA8652FC 3-axis accelerometer at 0x1d, which the fxos8700 driver detects by WHOAMI. The part has no magnetometer, so the driver is defaulted to accelerometer-only mode. Assisted-by: Claude:claude-opus-5 Signed-off-by: Marvin Gnad <marvin.gnad@gmail.com>
The Ensemble SoCs use the Synopsys DesignWare GPIO controller, with one eight pin controller instance per port and one interrupt line per pin. Add the controllers common to every Ensemble SoC: GPIO0 to GPIO8 and LPGPIO. LPGPIO sits in the Always-On domain and is only two pins wide on the E1C, so it is described here at that width and widened by the layer that describes the larger devices. As with the other peripherals in this layer, the interrupt routing is kept out of the resource description and lives in the NVIC and GIC specific files, since the same controller is reached through the NVIC from an RTSS cluster and through the GIC from the APSS cluster. The interrupt lines are described here for completeness, but the hardware requires the GPIO debounce logic to be enabled for interrupt detection to work correctly, which in turn needs the debounce clock running. That clock is off after reset and nothing turns it on, so enabling it is left to a follow-up change. Signed-off-by: Silesh C V <silesh@alifsemi.com>
The E4, E6 and E8 devices carry more GPIO than the minimum common subset: GPIO9 to GPIO14 in the peripheral domain. They also carry the full eight pin wide LPGPIO rather than the two pins available on the E1C. Note that GPIO16 and GPIO17 are left out as they are not bonded out on every package this layer covers. As with the ports in the common layer, the interrupt lines are described for completeness, but the hardware requires the GPIO debounce logic to be enabled for interrupt detection to work correctly, which in turn needs the debounce clock running. Enabling it is left to a follow-up change. Signed-off-by: Silesh C V <silesh@alifsemi.com>
The AppKit carries a multicolor LED and a five position navigation joystick. Wire up the three LED channels and all five joystick switches, so that the blinky and button samples run on the board out of the box. The three board targets differ only in the cluster they build for and in the console they use, so describe the on-board peripherals once in ensemble_e8_ak_common.dtsi rather than three times. Each target keeps what genuinely differs: its SoC and cluster includes, its compatible and chosen block, and the UART routed to the debug connector for that cluster. The common file has to be included after the SoC, cluster and pinctrl dtsi, since every node it references comes from one of those. The DesignWare GPIO driver does not implement both edge triggering, which the interrupt driven mode of the GPIO keys driver requires, so the keys are polled instead. Polling can be dropped once the driver gains both edge support. Signed-off-by: Silesh C V <silesh@alifsemi.com>
Add 'ranges' and related properties to the Flash controller node for the R7FA4M1AB3CFM SoC. Signed-off-by: Luca Burelli <l.burelli@arduino.cc>
Add 'ranges' and related properties to the Flash controller node for the R7FA6M5BH3CFC SoC. Signed-off-by: Luca Burelli <l.burelli@arduino.cc>
Update the partition nodes in the arduino/portenta_c33 and arduino/uno_r4 device tree files to use the "zephyr,mapped-partition" binding instead of "fixed-partition". Signed-off-by: Luca Burelli <l.burelli@arduino.cc>
Fixes touch controller coordinate manipulation properties according to touchscreen-common.yaml. Signed-off-by: Fabian Blatz <fabianblatz@gmail.com>
Clarify that the properties are slightly different for the touch screen controller then for the LVGL input pointer binding. Signed-off-by: Fabian Blatz <fabianblatz@gmail.com>
Fixes the help text of the lvgl pointer input device binding to mention the correct property names for touch devices. Signed-off-by: Fabian Blatz <fabianblatz@gmail.com>
The SoC and board hooks are selected by the SoC or the board. They also implemt them. Remove the ability to enable them regularly by the user as the build would then fail, because the board or SoC has not implemented them. Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
ppp_fsm_recv_protocol_rej() only logged the current LCP state and returned NET_DROP, so a Protocol-Reject was effectively ignored. This has two consequences. The rejected protocol never learns that the peer rejected it. RFC 1661 chapter 5.7 says that upon reception of a Protocol-Reject the implementation MUST stop sending packets of the indicated protocol at the earliest opportunity, but the rejected NCP keeps retransmitting its Configure-Request until Max-Configure is reached. With the default settings that is ten retransmissions three seconds apart, so bringing up the link is delayed by half a minute for every protocol the peer does not implement. Returning NET_DROP also makes the generic dispatcher in ppp_fsm_input() fall through to its default branch, which answers with a Code-Reject. Code 8 is a perfectly valid LCP code, so we reject a packet we are required to understand. Read the Rejected-Protocol field and hand the event to the matching FSM through its proto_reject callback. The callbacks were already registered by IPCP, IPV6CP and PAP but nothing ever invoked them. As described in RFC 1661 chapter 4.2, a Protocol-Reject of a network layer protocol is an RXJ+ event which leaves LCP itself running, so LCP stays up and the remaining protocols continue to negotiate. Per chapter 5.7 a Protocol-Reject received outside the LCP Opened state is silently discarded. Both paths now return NET_OK so that no Code-Reject is emitted. Assisted-by: Claude:claude-sonnet-5 Simantic Signed-off-by: Ahnaf Shahriar <shahriarahnaf007@gmail.com>
When CONFIG_NET_TEST is enabled the PPP driver drops the packet in ppp_send() because there is no UART to write it to. That leaves the tests with no way of checking what the PPP stack actually sends. Add an optional callback, registered with ppp_driver_register_send_cb(), that is invoked with the outgoing packet before it is dropped. The callback is only compiled in for CONFIG_NET_TEST builds and nothing changes when it is not registered. Assisted-by: Claude:claude-sonnet-5 Simantic Signed-off-by: Ahnaf Shahriar <shahriarahnaf007@gmail.com>
ShahriarAhnaf
force-pushed
the
fix/ppp-protocol-reject
branch
from
August 27, 2026 23:03
89e5a02 to
e02c643
Compare
Add a test case that drives the PPP link into the network phase, waits for IPCP and IPV6CP to send their Configure-Request, and then feeds an LCP Protocol-Reject rejecting IPV6CP. The test asserts the two requirements of RFC 1661 chapter 5.7: no Code-Reject is sent in response to the Protocol-Reject, and IPV6CP sends nothing more once it has been rejected, checked over a period longer than the FSM restart timer. It also asserts that IPCP keeps negotiating, so that rejecting one network protocol does not take the link down. Both assertions fail without the ppp_fsm_recv_protocol_rej() fix. Assisted-by: Claude:claude-sonnet-5 Simantic Signed-off-by: Ahnaf Shahriar <shahriarahnaf007@gmail.com>
ShahriarAhnaf
force-pushed
the
fix/ppp-protocol-reject
branch
from
August 27, 2026 23:19
e02c643 to
11eb275
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Review copy, scoped to this fork only. Not intended to be opened against zephyrproject-rtos/zephyr yet.
ppp_fsm_recv_protocol_rej()logged the LCP state and returnedNET_DROP, so a received Protocol-Reject was ignored: the rejected protocol kept retransmitting until Max-Configure (RFC 1661 §5.7 says it MUST stop), and the fallthrough toppp_fsm_input()'s default branch answered a valid Protocol-Reject with a Code-Reject.Read the Rejected-Protocol field and dispatch to the matching FSM's
proto_rejectcallback (already registered by IPCP/IPV6CP/PAP, never invoked). Per §4.2 a Protocol-Reject of a network-layer protocol is RXJ+ (LCP stays up); per §5.7 one outside LCP Opened is discarded. Matches pppd'slcp_rprotrej().Found running a Zephyr PPP client against a peer that rejects IPV6CP: link came up 30s late, and the client wrongly Code-Rejected a valid Protocol-Reject.
Note:
ppp_fsm_proto_reject()in fsm.c is unused — that's the RXJ- (Protocol-Reject of LCP itself) case, not this one.Verified:
west twister -p mps2/an385 -T tests/net/ppp/driver— 4/4 pass; fails on both assertions with the fix reverted. checkpatch clean.