Network connections send and receive data using transport and security protocols.

Posts under Network tag

200 Posts
Sort by:

Post

Replies

Boosts

Views

Activity

iOS "5G slicing" low-latency feature support in-app support
Hi, All. Does anybody can help me, please? I have read "Optimize your app for 5G" by Apple from June 10 2021 and watched WWDC21 video "Optimize for 5G networks", but wasn't been able to find answers for questions that interesting for me: 5G Slicing Is iOS having any API for "5G Slicing" or support it somehow? Especially, interested in "Prioritise Low-Latency" feature of "5G Slicing". Can application send data using "low-latency" slice? Gaming, ARKit, CoreML, SceneKit In mentioned article - it's nothing about how to finally optimise it for gaming. No any examples and no any useful information related to highlighted frameworks.. is "5G optimisation" possible to do in case of WKWebView usage? By my requirements, I need to use "5G Slicing" with low-latency in our gaming application. In Android it having network capability "low-latency"(NET_CAPABILITY_PRIORITIZE_LATENCY). Is iOS having something similar? Thanks all in advance for anyone who can help somehow. Best regards, Eugene.
5
0
1.2k
Oct ’23
Need to bind `nw_parameters_create_secure_tcp` with specific utun interface.
Hi Team, I am utilizing the nw_parameters_create_secure_tcp in Objective-C to establish a TCP connection. However, I would like the connection to go through a specific utun interface. I attempted to use the following method for binding: nw_parameters_require_interface(nw_parameters_t parameters, _Nullable nw_interface_t interface); Unfortunately, I haven't found any API that can convert a utun interface name or index to an nw_interface_t object. Both nw_interface_create_with_index and nw_interface_create_with_name are private methods. I also tried using nw_path_monitor_set_update_handler and nw_path_enumerate_interfaces, but they did not return the utun interface. Could you please suggest how I can obtain the utun interface as an nw_interface_t?
1
0
394
Oct ’23
rvictl silent fail on M1 MBA w/ OS 14.0 Xcode 15.0
Hoping for updated guidance on rvictl on M1 platform. Need to do some network packet capture for an app running in iOS on an iPhone. I have read through previous related threads on this issue but final reports were "all fixed" but I am unable to get rvictl to create an interface for an attached iOS device. Security policy is set permissive in Recovery console kext was accepted in Privacy & Security, rebooted as required "rpmuxd" does not appear to be running. Poking around in the plist file I note that "/usr/libexec/rpmuxd" does not exist on my system. Not sure how this all relates. Welcome any guidance, thanks! rvictl doesn't report FAILED, just silently exits: % sudo rvictl -s 000080300-XXXXXXXXXX % Codesign reports OK: % codesign -v -vvv "/Library/Apple/System/Library/Extensions/RemoteVirtualInterface.kext" /Library/Apple/System/Library/Extensions/RemoteVirtualInterface.kext: valid on disk /Library/Apple/System/Library/Extensions/RemoteVirtualInterface.kext: satisfies its Designated Requirement rvictl is in path: % which -a rvictl /Library/Apple/usr/bin/rvictl rvictl list doesn't work: % sudo rvictl -l bootstrap_look_up(): 1102 Could not get list of devices Cannot manually kextload again: % sudo kextload /Library/Apple/System/Library/Extensions/RemoteVirtualInterface.kext Executing: /usr/bin/kmutil load -p /Library/Apple/System/Library/Extensions/RemoteVirtualInterface.kext Error Domain=KMErrorDomain Code=71 "Kernel request failed: (libkern/kext) kext (kmod) start/stop routine failed (-603946985)" UserInfo={NSLocalizedDescription=Kernel request failed: (libkern/kext) kext (kmod) start/stop routine failed (-603946985)}
0
0
443
Oct ’23
Unexpected behavior of `AdditionalRoutes` property in DynamicStore
Hello, I experienced a strange (and in my opinion unexpected) behavior from DynamicStore/configd. In our application we setup the routes in the system by setting AdditionalRoutes property on a specific interface to route part of the network traffic through it. The routes are set properly, but I noticed that the they are not cleared once removed from AdditionalRoutes. After a while I figured, that the problem lies in the DestinationAddress I set in AdditionalRoutes. I was using the following configuration: var newRoutes: [[String: NSObject]] = [ ["DestinationAddress": "10.0.0.1" as NSObject, "SubnetMask": "255.0.0.0" as NSObject ] ] and it resulted in a new route: 10 link#16 UCS en0 ! which was not cleared when AdditionalRoutes were reset to the original value. When I changed the DestinationAddress to: var newRoutes: [[String: NSObject]] = [ ["DestinationAddress": "10.0.0.0" as NSObject, "SubnetMask": "255.0.0.0" as NSObject ] ] both, setting and clearing routes works as expected. The only difference is changing the DestinationAddress from 10.0.0.1 to 10.0.0.1. In my opinion this incosistent behavior. Although I can understand that the system might reject 10.0.0.1 as a valid DestinationAddress for creating routes, I don't think it's correct behavior to accept such address, but never clear the routes. The full source code which might be used to verify my claims: import Foundation import SystemConfiguration let en0ServiceIPv4 = "State:/Network/Service/***/IPv4" as CFString let store = SCDynamicStoreCreate(nil, "dseditor" as CFString, nil, nil)! let originalValue = SCDynamicStoreCopyValue(store, en0ServiceIPv4) as! [String: NSObject] var newValue = originalValue print("AdditionalRoutes: \(String(describing: originalValue["AdditionalRoutes"]))") var newRoutes: [[String: NSObject]] = [ ["DestinationAddress": "10.0.0.1" as NSObject, "SubnetMask": "255.0.0.0" as NSObject ] ] newValue["AdditionalRoutes"] = newRoutes as NSObject print("newValue: \(newValue)") var result = SCDynamicStoreSetValue(store, en0ServiceIPv4, newValue as CFPropertyList) print("set new value: \(result)") sleep(3) result = SCDynamicStoreSetValue(store, en0ServiceIPv4, originalValue as CFPropertyList) print("restore old value: \(result)") Naturally, the en0ServiceIPv4 needs to be changed and the program needs to be run as root. Can you please share your thoughts, if this is an OS bug or expected behavior? If it is expected, what is the reasoning behind it?
4
0
592
Oct ’23
How to check no network cases in iOS simulator in UI testing automation
In my iOS app, When the API calls failed due to poor network, the app will display 'No network error screen'. I have to check if this error screen is displayed correctly or not in case of poor network, in automation testing using simulator. But I couldn't find any possibility to turn off internet manually in simulator and check whether the 'No network' screen displays. I installed 'Network Link Conditioner' in macOS and tried using it on simulator. But, in simulator settings -> developer , there is no section called "Network Link Conditioner" to handle this in simulator. So, is there any other solution to handle this network case in simulator ?
1
0
629
Oct ’23
RTSP live video stream by cable doesn't work after update to iPad OS 17.
Hard/Software: iPad 7, Ipad OS 17.0.3, MobileVLCKit, SDP/RTSP stream, USB/Ethernet cable. Description: I have an iPad application for live video streaming. From a security point of view, it should work via cable (USB/Ethernet). This application uses MobileVLCKit player to play videos. Videos are available via a URLs with an IP address and use the SDP/RTSP format (url example: http://172.20.129.69/stream/sdp). Code example: let camUri="http://172.20.129.69/stream/sdp" let options = ["--network-caching=100"] var players: [VLCMediaPlayer] = [] players.append(VLCMediaPlayer(options: options)) let media = VLCMedia(url: camUri) players[0].media = media players[0].drawable = centerView players[0].play() Problem: The application worked on various iPads with iPad OS 16 and lower (using cable or Wi-Fi). After updating to iPad OS 17, the application no longer works via cable. What could be the problem and how to fix it?
1
0
640
Oct ’23
Operation not permitted - MacOS - Swift - UITests
I`m trying create simple http sever, when I do it in main target of my macOS app then it works, but when I do it in uitests target it fails (result == -1 (Operation not permitted)). Interestingly when I run it in iOS uiTests target then it works. let sockfd = socket(AF_INET, SOCK_STREAM, 0) var serverAddress = sockaddr_in(sin_len: __uint8_t(MemoryLayout<sockaddr_in>.size), sin_family: sa_family_t(AF_INET), sin_port: CFSwapInt16HostToBig(8080), sin_addr: in_addr(s_addr: inet_addr("127.0.0.1")), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) let result = withUnsafePointer(to: &serverAddress) { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { Darwin.bind(sockfd, $0, socklen_t(MemoryLayout<sockaddr_in>.size)) } } I've got set in my main target entitlements: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.app-sandbox</key> <true/> <key>com.apple.security.network.client</key> <true/> <key>com.apple.security.network.server</key> <true/> </dict> </plist> What can be reason that it fails? how can I fix it?
5
0
1.3k
Oct ’23
URLSessionWebSocketTask custom close code
Is there a good way to access the web socket task actual close code? when looking at the task delegate: urlSession(_ session: URLSession, webSocketTask: URLSessionWebSocketTask, didCloseWith closeCode: URLSessionWebSocketTask.CloseCode, reason: Data?) I can see my custom code _closeCode = (long long) 4231 but the delegate (and the task's) closeCode variable is an enum (URLSessionWebSocketTask.CloseCode) so it have a fallback to the default invalid (0) for unknown values. I wonder if using webSocketTask.value(forKey: "_closeCode") Count as accessing private api, or if there is a cleaner way to access this raw value.
3
0
510
Oct ’23
Why does the iOS app with TLS 1.3 offer SHA-1 as signature algorithm
I was investigating the Client Hello for my iOS app and saw that the TLS 1.3 handshake with Client Hello sends Signature Algorithm: rsa_pkcs1_sha1 (0x0201) Signature Hash Algorithm Hash: SHA1 (2) Signature Hash Algorithm Signature: RSA (1) I thought SHA-1 is not being used anymore. The Full list of offered signature_algorithms from the client in the Extension: signature_algorithms (len=24) Type: signature_algorithms (13) Length: 24 Signature Hash Algorithms Length: 22 Signature Hash Algorithms (11 algorithms) Signature Algorithm: ecdsa_secp256r1_sha256 (0x0403) Signature Hash Algorithm Hash: SHA256 (4) Signature Hash Algorithm Signature: ECDSA (3) Signature Algorithm: rsa_pss_rsae_sha256 (0x0804) Signature Hash Algorithm Hash: Unknown (8) Signature Hash Algorithm Signature: SM2 (4) Signature Algorithm: rsa_pkcs1_sha256 (0x0401) Signature Hash Algorithm Hash: SHA256 (4) Signature Hash Algorithm Signature: RSA (1) Signature Algorithm: ecdsa_secp384r1_sha384 (0x0503) Signature Hash Algorithm Hash: SHA384 (5) Signature Hash Algorithm Signature: ECDSA (3) Signature Algorithm: ecdsa_sha1 (0x0203) Signature Hash Algorithm Hash: SHA1 (2) Signature Hash Algorithm Signature: ECDSA (3) Signature Algorithm: rsa_pss_rsae_sha384 (0x0805) Signature Hash Algorithm Hash: Unknown (8) Signature Hash Algorithm Signature: Unknown (5) Signature Algorithm: rsa_pss_rsae_sha384 (0x0805) Signature Hash Algorithm Hash: Unknown (8) Signature Hash Algorithm Signature: Unknown (5) Signature Algorithm: rsa_pkcs1_sha384 (0x0501) Signature Hash Algorithm Hash: SHA384 (5) Signature Hash Algorithm Signature: RSA (1) Signature Algorithm: rsa_pss_rsae_sha512 (0x0806) Signature Hash Algorithm Hash: Unknown (8) Signature Hash Algorithm Signature: Unknown (6) Signature Algorithm: rsa_pkcs1_sha512 (0x0601) Signature Hash Algorithm Hash: SHA512 (6) Signature Hash Algorithm Signature: RSA (1) Signature Algorithm: rsa_pkcs1_sha1 (0x0201) Signature Hash Algorithm Hash: SHA1 (2) Signature Hash Algorithm Signature: RSA (1)
4
0
482
Oct ’23
How to run python script from remote?
I do have a python script which I am using locally in terminal, works great. Since it is using Apple specific stuff, I have to use my Mac to run it, it does not work on Unix or Windows machines. Now I need to run the script from remote (my webserver) and parse / save the output of it. I have thought to activate Apache and PHP on my Mac, but I don't want to give access to everyone either, so this is maybe not the best. Does anyone have an idea how to do this? Any hint is appreciated!
0
0
380
Oct ’23
Monitoring Socket Viability
Working a DTS incident today, someone asked me exactly how you use SCNetworkReachabilityCreateWithAddressPair to monitor a socket’s viability (per the advice in TN3151). I thought I’d posted code for that many times but, on searching my records, it turns out that I haven’t. Ever. Weird! Anyway, this post rectifies that. If you have questions or comments, start a new thread here on DevForums. Tag it with System Configuration so that I see it. Share and Enjoy — Quinn “The Eskimo!” @ Developer Technical Support @ Apple let myEmail = "eskimo" + "1" + "@" + "apple.com" Monitoring Socket Viability The BSD Sockets best practices section of TN3151 Choosing the right networking API says: Once you’ve established a connection, use SCNetworkReachabilityCreateWithAddressPair to monitor its viability. Without this, your program won’t notice that a connection is stuck due to a TCP/IP stack reconfiguration. While this is correct, it’s not exactly expansive. This post shows how you might use that call to monitor the viability of a socket. It explains this technique using a Swift example, but there’s a C version of the code below for those with a “sad devotion to that ancient religion” (-: Seriously though, this code is very specific to Apple platforms, where you also have access to Network framework, and that has built-in support for this sort of thing. Only use this code if you absolutely must stick with BSD Sockets. IMPORTANT The Swift code in this post relies on the QSocket2023 library from Calling BSD Sockets from Swift. To start, I assume you have a class like this: final class QConnection { private var socket: FileDescriptor private var queue: DispatchQueue private var targetQ: SCNetworkReachability? … initialiser elided … } Each instance of this class ‘owns’ the socket. It uses a Dispatch queue that serialises all access to the instance. Finally, the targetQ property holds a reachability object that monitor’s the socket’s viability. Once an instance has connected its socket, it calls this method to start monitoring its viability: extension QConnection { fileprivate func startMonitoring() throws { let local = try socket.getSockName() let remote = try socket.getPeerName() let target = try scCall { try QSockAddr.withSockAddr(address: local.address, port: local.port) { saLocal, _ in try QSockAddr.withSockAddr(address: remote.address, port: remote.port) { saRemote, _ in SCNetworkReachabilityCreateWithAddressPair(nil, saLocal, saRemote) } } } var context = SCNetworkReachabilityContext() context.info = Unmanaged.passUnretained(self).toOpaque() try scCall{ SCNetworkReachabilitySetCallback(target, { target, flags, info in let obj = Unmanaged<QConnection>.fromOpaque(info!).takeUnretainedValue() let isViable = flags.contains(.reachable) obj.viabilityDidChange(isViable) }, &context) } try! scCall{ SCNetworkReachabilitySetDispatchQueue(target, self.queue) } self.targetQ = target } } This creates a reachability object with the socket’s local and remote addresses. It then sets up a callback on that object that runs on the instance’s Dispatch queue. That callback calls viabilityDidChange(_:) when the reachability flags change. Here’s the viabilityDidChange(_:) method: extension QConnection { fileprivate func viabilityDidChange(_ isViable: Bool) { dispatchPrecondition(condition: .onQueue(self.queue)) print("isViable: \(isViable)") } } This just prints the new value. In a real product you would: Merge duplicate changes. Debounce the change. The way that reachability works, you might see transient events, and it’s best to ignore those. If the socket is non-viable for too long, start the process of closing it down. Finally, here’s the code to stop viability monitoring. extension QConnection { fileprivate func stopMonitoring() { guard let target = self.targetQ else { return } self.targetQ = nil try! scCall { SCNetworkReachabilitySetCallback(target, nil, nil) } try! scCall { SCNetworkReachabilitySetDispatchQueue(target, nil) } } } Note The snippets above assume two simple helper routines that turn System Configuration framework errors into Swift errors: func scCall(_ body: () throws -> Bool) throws { let ok = try body() guard ok else { throw SCCopyLastError() } } func scCall<Result>(_ body: () throws -> Result?) throws -> Result { guard let result = try body() else { throw SCCopyLastError() } return result } And for those of you working with a C-based language, here’s pretty much the same code in plain ol’ C: struct QConnection { int sock; dispatch_queue_t queue; SCNetworkReachabilityRef target; }; typedef struct QConnection QConnection; static bool _QConnectionStartMonitoring(QConnection * connection) { struct sockaddr_storage local = {}; socklen_t localLen = sizeof(local); bool ok = getsockname(connection->sock, (struct sockaddr *) &local, &localLen) >= 0; if ( ! ok ) { return false; } struct sockaddr_storage remote = {}; socklen_t remoteLen = sizeof(remote); ok = getpeername(connection->sock, (struct sockaddr *) &remote, &remoteLen) >= 0; if ( ! ok ) { return false; } SCNetworkReachabilityRef target = SCNetworkReachabilityCreateWithAddressPair( NULL, (const struct sockaddr *) &local, (const struct sockaddr *) &remote ); if (target == NULL) { return false; } SCNetworkReachabilityContext context = { .info = connection }; ok = SCNetworkReachabilitySetCallback(target, _QConnectionReachabilityCallback, &context); if ( ! ok ) { CFRelease(target); return false; } ok = SCNetworkReachabilitySetDispatchQueue(target, connection->queue); if ( ! ok ) { ok = SCNetworkReachabilitySetCallback(target, NULL, NULL); assert(ok); CFRelease(target); return false; } connection->target = target; return true; } static void _QConnectionReachabilityCallback(SCNetworkReachabilityRef target, SCNetworkReachabilityFlags flags, void * info) { #pragma unused(target) #pragma unused(info) QConnection * connection = (QConnection *) info; bool isViable = (flags & kSCNetworkReachabilityFlagsReachable) != 0; _QConnectionViabilityDidChange(connection, isViable); } static void _QConnectionViabilityDidChange(QConnection * connection, bool isViable) { dispatch_assert_queue(connection->queue); fprintf(stderr, "isViable: %d\n", isViable); } static void _QConnectionStopMonitoring(QConnection * connection) { SCNetworkReachabilityRef target = connection->target; if (target == NULL) { return; } connection->target = NULL; bool ok = SCNetworkReachabilitySetCallback(target, NULL, NULL); assert(ok); ok = SCNetworkReachabilitySetDispatchQueue(target, NULL); assert(ok); CFRelease(target); }
0
0
501
Oct ’23
Unexpected Local Network Privacy Alert in Special Scenarios
At times, I saw a Local Network Privacy Alert when opening an app, even when I'm exclusively using cellular data. Additionally, when I reinstall certain apps from the Apple App Store at the same time, some of them immediately request provincial network permissions, others do not which may only use the system network library. Has anyone else faced this issue? It seems like a system issue lead to a unexpected behaviour. The console log has some XPC_ERROR_CONNECTION_INVALID error log related to the process of nehelper. nehelper sent invalid response: <dictionary: 0x245cb7e20> { count = 1, transaction: 0, voucher = 0x0, contents = "XPCErrorDescription" => <string: 0x245cb7fb8> { length = 18, contents = "Connection invalid" } } 30760 0x89d905 UsageTrackingAgent 38502326 libsystem_networkextension.dylib nw_parameters_set_source_application_by_bundle_id_internal Failed to convert from bundle ID (com.apple.UsageTrackingAgent) to UUID. This could lead to wrong data usage accounting. 30760 0x89d905 UsageTrackingAgent 38502326 Network
1
0
495
Oct ’23
Network.framework Performance issues in Downstream since Sonoma Update
I have built an application to measure network throughput using Network.framework. Since the Sonoma Update, I've encountered some strange performance issues with this framework. I use the Loopback Channel by running the server on my Mac itself, which is written in Golang. Before the update, performance was not an issue. After the update, however, the throughput fluctuates significantly. I started to investigate, I use the following function to parse the data: connection.receive(minimumIncompleteLength: 1, maximumLength: 32768) { // My frame parsing code } When I use a higher maximumLength, for example, 65536 bytes, it starts to fluctuate, and the received message size for parsing varies between 2.6 Mbytes and 7 Mbytes. However, if the maximumLength is 32768 or lower, and the message size is smaller or larger than this range, then the performance is as expected. To further isolate the issue, I forced the server to just send messages and removed my frame parsing code, ensuring that the problem is not related to this. This behavior is very peculiar, and I'm unsure how to fix it. Are there others who have experienced similar performance problems? It's worth noting that this issue occurs only with downstream performance, not with upstream.
1
0
578
Nov ’23
Local Network Privacy FAQ-18
This post is part of the Local Network Privacy FAQ. Can my app trigger the local network privacy alert when the device is on WWAN? Yes. While the local network privacy alert is most commonly seen when the device is on a Wi-Fi network, that’s not required. It’s possible for your app to trigger the local network privacy alert on a device that is on WWAN. Indeed, the alert can show up even if you: Leave the current Wi-Fi network in Control Center Turn Wi-Fi off in Settings Enable Airplane Mode in Settings Back to the FAQ
0
0
443
Oct ’23
Network Framework with multiple clients
How can I use the Network framework to establish a "client-server" type relationship between a server iPad and, say, 3 client iPads? I've downloaded the TicTacToe sample app, https://developer.apple.com/documentation/network/building_a_custom_peer-to-peer_protocol which demonstrates nicely a connection between a PeerListener and a PeerBrowser. However, I then tried to make an array of PeerConnection objects rather than a single one, and send data to each one separately from the PeerListener. However, what appears to happen is that the 1st PeerBrowser connects successfully, but when the 2nd PeerBrowser connects, it replaces the 1st PeerBrowser, and both PeerConnection objects in the array point to the 2nd PeerBrowser, so when I send data via either PeerConnection, the data arrives at the 2nd PeerBrowser. Is it possible to do this? If so, how can I establish multiple PeerConnections between 1 "server" iPad and multiple "client" iPads?
2
1
591
Nov ’23
Network.Framework vs URLSession in Background Task (BGTask)
As noted here, https://developer.apple.com/forums/thread/116799 the Network framework probably won't have a connection available when running in the background. We've been using the BGTask for a couple years now to start a URLSession and pull data from a web server. It works very nicely and reliably. Do we have any options if we want to connect to another iPad, though? I ran a test and even if I have a "server" iPad running a Network framework listener (NWListener), and the app is in the foreground and the screen on, a "client" iPad (NWBrowser) cannot connect to the NWListener when trying to connect from the BGTask; it gives a DefunctConnection error. Why does the Network framework not have the network available to it, but a URLSession does? Is this a limitation of the iPad, or the Network framework? If I had an iPad running as a web server like this project, https://github.com/swisspol/GCDWebServer and an iPad client tries to connect a URLSession to it, would that work? If this is an iPad limitation, could I use a MacBook on the network as a web server and connect to that instead?
6
0
756
Nov ’23
How to create and advertise a Bonjour service with Network.framework?
I'm trying to create and advertise a Bonjour service via Network.framework. In Xcode, target, Info tab, I've added the entry to plist: And then written the following code: guard let listener = try? NWListener(service: .init(name: "My Printer Service", type: "_printer._tcp"),using: .tcp) else { return nil } self.listener = listener listener.stateUpdateHandler = { newState in switch newState { case.ready: print("starting") case .failed(let error): print("error: \(error)") default: print(newState) } } listener.start(queue: .main) However, the status is failed with error message: POSIXErrorCode(rawValue: 22): Invalid argument
1
0
761
Nov ’23
#Gui Linux virtual machine on Mac
Good day , thank you very much for the #virtualization article I have now managed to create a linux(#debian 12/bookworm) virtual machine I now have the following questions. How can i increase the size of the GUI Linus VM.bundle from 68.72G to 150G? Unable to obtain an IP V4 address to a bridge (have intall brige-utils package) - can get IP v6 address without any problem. my #bridge setup is auto br0 iface br0 inet dhcp bridge_ports enp0s1 bridge-stp on bridge-fd 0 Unable to ping the host from the virtual machine , but able to ping vms from the host - no firewalls are running, how can i enable icmp from vm to host and host to other containers. my target is to run lxd/incus containers to test few of my applications in apple silicon I am now able to run lxd/incus without any problem. however i am not able to access the application that are running in the containers, provided I am logged into the linux vm which beats the purpose of publishing the my apps, few of the services are IBM informix REST API / Nginx . My #requirement is 1, increase the size of the vm image.(#GUI Linux vm.bundle) 2. Obtain #ip address V4 for br0 3. Run #lxd / #incus containers 4. #icmp comms between host / vm / containers Please let me know if there are possibilities to achieve my requirement. Thank you
0
0
417
Nov ’23