// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef IPCZ_SRC_IPCZ_ROUTER_LINK_STATE_H_ #define IPCZ_SRC_IPCZ_ROUTER_LINK_STATE_H_ #include <atomic> #include <cstdint> #include <type_traits> #include "ipcz/ipcz.h" #include "ipcz/link_side.h" #include "ipcz/node_name.h" #include "ipcz/ref_counted_fragment.h" namespace ipcz { // Structure shared between both Routers connected by RouterLink. This is used // to synchronously query and reflect the state of each Router to the other, // and ultimately to facilitate orderly state changes across the route. This // may live in shared memory, where it should be managed as a // RefCountedFragment. // // Note that RouterLinkStates are effectively only used by central links. struct IPCZ_ALIGN(8) RouterLinkState : public RefCountedFragment { … }; // The size of this structure is fixed at 64 bytes to ensure that it fits the // smallest block allocation size supported by NodeLinkMemory. static_assert …; // RouterLinkState instances may live in shared memory. Trivial copyability is // asserted here as a sort of proxy condition to catch changes which might break // that usage (e.g. introduction of a non-trivial destructor). static_assert …; } // namespace ipcz #endif // IPCZ_SRC_IPCZ_ROUTER_LINK_STATE_H_