0.10.x → 0.11.x¶
This is the release with the largest structural change: controllers became directories.
src/flync_cli is unchanged in this range (the Typer CLI did not exist until 0.12).
Breaking — YAML schema¶
Controller layout: single file → directory, meta → controller_metadata ⚠️¶
In 0.10 each controller was one file <ecu>/controllers/<name>.flync.yaml with a
top-level meta block. In 0.11 each controller is a directory
<ecu>/controllers/<name>/ containing controller_metadata.flync.yaml.
# before (0.10.x) — controllers/eth_ecu_controller1.flync.yaml
meta:
author: Dev
compatible_flync_version:
version_schema: semver
version: 0.9.x
target_system: flync_os
name: eth_ecu_controller1
interfaces:
- name: eth_ecu_c1_iface1
mac_address: 00:11:22:33:44:55
# after (0.11.x) — controllers/eth_ecu_controller1/controller_metadata.flync.yaml
controller_metadata:
type: embedded
author: Dev
compatible_flync_version:
version_schema: semver
version: 0.11.x
target_system: flync_os
The controller name is now implied from the folder name.
Auto error on unmigrated config: the Controller model runs a mode="before" validator
that detects the legacy top-level meta.compatible_flync_version shape and raises a fatal
error:
ID:
FLYNC-GEN-FAT-COMP-048Message: “Incompatible Controller Config detected (compatible_flync_version=…). FLYNC 0.11.x requires every controller to live in its own directory containing ‘controller_metadata.flync.yaml’. Update the configuration to the new layout or downgrade FLYNC to 0.10.x.”
Controller field interfaces → ethernet_interfaces + on-disk layout¶
Controller.interfaces: List[ControllerInterface] became
ethernet_interfaces: List[EthernetInterface] where EthernetInterface =
{interface_config: ControllerInterface, sockets: List[SocketContainer]}. Each ethernet
interface is now a directory controllers/<name>/ethernet_interfaces/<iface>/
interface_config.flync.yaml (optionally with a sockets/ sub-directory). Controller.can_interfaces
and Controller.lin_interfaces were also added.
A 0.10 interfaces: [ ... ] key under a controller no longer resolves.
ECU-level sockets removed → moved under the interface¶
ECU.sockets: List[SocketContainer] (stored in <ecu>/sockets/*.flync.yaml) was
removed. Sockets are now attached per ethernet interface and stored at
controllers/<name>/ethernet_interfaces/<iface>/sockets/socket_<x>.flync.yaml.
- action:
move the contents of
<ecu>/sockets/into the owning controller interface’ssockets/directory. The file content (vlan_id+sockets) is unchanged.
VLAN / multicast address validation¶
vlan_entry.py (extracted from switch.py): MulticastGroup.address is now required
to be a multicast MAC/IP address, and VLANEntry default handling changed. Configs
that used non-multicast addresses in switch VLAN multicast lists now fail.
Top-level load behavior: failed ECUs/controllers are dropped¶
FLYNCModel now silently drops ECUs/controllers that fail to load (and raises a major
error at the ECU level) instead of cascading model-wide errors. Callers reading
model.ecus should expect a malformed ECU to be absent rather than the whole load
failing. Duplicate-IP detection now warns instead of raising.
Breaking — Python API¶
Controller.interfaces→controller.ethernet_interfaces.ECU.sockets(field) no longer exists — use the owning interface’s.socketsorecu.get_all_sockets().ControllerInterface.mac_addressis nowOptional(defaultNone) — guard forNonein code that read it directly.The registry / instance machinery was reworked in this range (
DictInstances/ListInstancesetc. now build on a newBaseRegistry). Public model fields are unchanged, but code touching class-levelINSTANCES/NAMESdicts must adapt.
Additive (0.11.x)¶
New domain packages: ``flync_4_signal`` (
Signal/SignalDataType,StandardPDU/MultiplexedPDU/ContainerPDU,CANFrame/CANFDFrame/LINFrame,PDUSender/PDUReceiver) and ``flync_4_bus`` (CANBus,LINBus+LINScheduleTable). Sockets can now carrydeployment_type: pdu_sender/pdu_receiver.FLYNCGeneralConfig.channels(newflync_channels.py) loaded fromgeneral/channels/(pdus/,can/,lin/,ethernet_pdu_containers/).New ECU classes:
router.py(RouteEntry/ controllerrouting_table),mac_multicast_endpoint.py(MACMulticastEndpoint+ newECU.mac_multicast_endpoints), CAN/LIN interfaces (CANInterfaceConfig,LINMasterInterfaceConfig/LINSlaveInterfaceConfigdiscriminated onnode_type), and the experimentalVirtualControllerInterface/VirtualSwitch/ComputeNodes.SOME/IP:
SOMEIPServiceProvider.provided_eventgroups; timing-profile discriminated union rework (backward compatible at the YAML level).SDK: new
has_object/get_definition/get_references_of/find_path_from_field/get_semantic_object_from_model;load_flync_modelbecame public.