MJ, Thanks. I see that the requirements for CA is much broader than the original mission.
I have also added comments inline below. Pat From: MyeongGi Jeong [mailto:[email protected]] Sent: Tuesday, March 24, 2015 2:34 AM To: Lankswert, Patrick; Light, John J; Kesavan, Vijay S; Macieira, Thiago; iotivity-dev at lists.iotivity.org Subject: Re: RE: [dev] IPv6 changes to IoTivity Dear Pat. I attached the file. And, I added the comment inline. MJ. Best Regards. ------- Original Message ------- Sender : Lankswert, Patrick<patrick.lankswert at intel.com <mailto:patrick.lankswert at intel.com> > Date : 2015-03-23 22:32 (GMT+09:00) Title : RE: [dev] IPv6 changes to IoTivity MJ, Can you share with us the requirements for the CA? The remaining comments are inline below. To all, There is a lot of talk about approaches. What worries me is that we are talking about how we are going to get what we want BEFORE stating what we want. I want a one (no more than two) page description of what we want for Iotivity. Before I do it myself, I will ask for volunteers to gather our requirements. What I want to see is: * Features in a phased approach. For example: o 1st release: Enumeration of interfaces, Selection of interfaces, SLAAC support o 2nd release: Routed discovery o ? * Justification for each release including use cases that will be enabled * Matrix of device support * No powerpoint or architecture I am adding this to the DCTG meeting agenda on Tues/PT, Wed/KT. You should expect this to be a working meeting. Pat From: iotivity-dev-bounces at lists.iotivity.org <mailto:iotivity-dev-bounces at lists.iotivity.org> [mailto:[email protected]] On Behalf Of ??? Sent: Saturday, March 21, 2015 1:58 AM To: Light, John J; Kesavan, Vijay S; Macieira, Thiago; iotivity-dev at lists.iotivity.org <mailto:iotivity-dev at lists.iotivity.org> Subject: Re: [dev] IPv6 changes to IoTivity Hi, John, Vijay, Thiago. Thanks to all for good suggestions and discussions. I'm the leader of Samsung CA development team. I'd like to talk with you about the CA design and the current development approach. When we decided that CA layer has to be required for IoTivity, several kinds of network interfaces and platforms were addressed. As far as I know, we considered Wifi, Ethernet, BLE and BT for connectivity, and Linux, Android, Tizen, Arduino for platofrms initially. ( Am I right, Vijay ? ) To abstract the above connectivitiy types for 4 platforms, our team started implementing separately according to the platform. To decouple from the change propagation, we devided the adapters according to the connectivity types. and, we think, Wifi and Ethernet interface may be little different for the future things like Arduino. [PCL, 2015/03/23] Pulling logic into an abstraction to address a particular platform is usually a complicating approach. Creating an interface for the general behavior and externalizing platform specific behavior is a superior software engineering approach. It all falls under separation of concern. There are a lot of examples to this. Since I like to use BSD sockets as an example, consider: IP sockets have some sockopts for controlling behavior but are not used to controlling the IP stack. To setup up or query the interfaces, other interfaces are used ie netlink under linux, IPHelper under Windows, etc. NOTE: netlink is expressed as a special socket() under linux which simplifies IO management, but it is very different from an IP socket. >> We have already designed and implemented general behavior for four kind of >> connectivity types(caadapterinterface.h) and we expect it can be effective >> for other connectivity types that will be applied to IoTivity in future. Of course, now we are trying to integrate wifi and ethernet adatper to handle IP transport, but for lite things such as Arduino, the interface of wifi and ethernet is much different. For example, CA Ethernet server (caethernetserver.cpp) for Arduino uses functions from W5100 class, whereas CA WiFi server (cawifiserver.cpp) uses WiFiUDP class. Similarly there are differences between APIs to send data in Eth & Wi-Fi client code. It can be separated in a file with preprocessor and Wifi or Ethernet can be selected on compile-time. I think, in this case, to satisfy the separation of concern, the separation of two connectivity types is more better. Please share your idea. 2015.03.24 @mj [PCL, 2015/03/24] If integration so tight that it is controlled with #ifdef?s, I may argue that it does not satisfy separation of concern. For instance, if someone wants to implement a new transport, do they have to modify the stack? If the answer is ?yes?, then the abstraction is not strong and separation of concern is lost. If the answer is ?no, then we should be good. Many open source libraries support these behaviors, for instance, the openssl library has BIO structs for I/O. You can have the libraries write to a standard BIO such as a file, socket, memory buffers, etc. simply by setting the BIO for the context. You can also easily write a custom BIO. I was able to write a BIO for a Bluetooth RFCOMM port such that the upper layers did not know that the bottom was an RFCOMM port. All this without, modifying openssl which also means that updating openssl to newer version was just a download and compile. Now, as your suggestion, we are merging the Wifi and Ethernet adapter and we are also modifing the adapter to support multiple interfaces in our local branch. [PCL, 2015/03/23] Why is the WiFi logic so different from Ethernet logic so different that it needs to be merged? Is this because of Arduino? I would like to see your proposal for the handling of multiple interfaces before you implement it. >> Followings are abstracted architecture to revised. I think IP transport adapter can handle all IP(v4 and v6 together) packets from each platform interfaces. And also, it can be handle IP packets from 6loWPAN interface, if the 6LoWPAN supports similar interfaces with other platforms. In addition, network interface selection has to be revised to select IP/LE/EDR/XXX 2015.03.24 @mj We consider the unified IP interface not only Wifi/Ethernet but also 6loWPAN over BLE, THREAD, etc. I expect that the patchset will be pushed soon. As Vijay's saying, we will continuesly enhance the CA layer step by step. I want to discuss continuously about Connectivity Abstraction .. * John I agree that the name of EDR/LE adapter might be changed if IP transport adapter created instead of wifi/ethernet adapter. The current names derives from connecitivt type, but we need to change it. Please review when we push it... I'll address the patchset after push Thanks Best Regards. -- MJ ------- Original Message ------- Sender : Light, John J<john.j.light at intel.com <mailto:john.j.light at intel.com> > Date : 2015-03-21 05:12 (GMT+09:00) Title : Re: [dev] IPv6 changes to IoTivity Vijay said "My understanding is that the original CA code contributors are currently working on merging Ethernet and WiFi into a single implementation." While this is a necessary first step, it is not sufficient. The combined adapter type (IP?) should combine Ethernet and Wi-Fi, but it should also include every other transport that uses a socket interface. Specifically, * 6LowPan over BLE * 6LowPan over 15.4 This brings up one of several naming problems in the Connectivity Abstraction. What CA calls 'BLE' is really * GATT over BLE Since BLE might be used with two different adapters, I suggest we proceed to name the adapters after the protocol being used rather than the underlying transport. John Light Intel Opensource Technology Center OIC Development -----Original Message----- From: Kesavan, Vijay S Sent: Friday, March 20, 2015 11:02 AM To: Light, John J; Macieira, Thiago; iotivity-dev at lists.iotivity.org <mailto:iotivity-dev at lists.iotivity.org> Subject: RE: [dev] IPv6 changes to IoTivity John, I agree that there will be platforms with multiple interfaces (some interfaces of the same type) and the eventual goal of Iotivity should be to support such platforms. The first modest step towards that is to support Iotivity on platform with one interface of type Ethernet, WiFi, BT, BLE and the current code/APIs are defined from that perspective. These APIs have to evolve to support multiple interfaces of the same type. The intent of exposing interface type at the API is to allow app-developers to use the information as they see fit. As the APIs evolve to support multiple interfaces, whether interface type is included or not is open to discussion (as suggested by Thiago the application can use an out-of-band mechanism to find out interface type). With regards to all your points on the implementation details, I fully agree and hope to see them resolved. My understanding is that the original CA code contributors are currently working on merging Ethernet and WiFi into a single implementation. Regards, --Vijay -----Original Message----- From: Light, John J Sent: Wednesday, March 18, 2015 8:58 AM To: Kesavan, Vijay S; Macieira, Thiago; iotivity-dev at lists.iotivity.org <mailto:iotivity-dev at lists.iotivity.org> Subject: RE: [dev] IPv6 changes to IoTivity Vijay, Since Thiago is traveling, I will take a shot at answering this. The distinction between adapter types is neither necessary nor sufficient, and it will degrade our software quality. The reason it is not necessary is that the distinction between Ethernet and Wi-Fi is entirely arbitrary. The socket model we are using has been carefully designed over the decades to hide the differences between Ethernet and Wi-Fi and fully support them. One or the other might need a special case here or there, but that can easily be handled in the code. The reason it is not sufficient is that real OIC systems in the industrial domain will have multiple instances of various adapters. For instance, many gateway machines will have multiple Ethernet interfaces (eth0, eth1, etc.). The current regime of separation by adapter will not provide the features we agree are so important in this environment. The API provides no means of distinguishing between those interfaces, and the code provides no means either. Only one case is supported (one Ethernet interface and one WiFi interface), and I don't believe that one case is sufficient for the diversity of network configurations OIC needs to support. The reason it will degrade our code is that it unduly complicates the code at the lower levels since the distinction is arbitrary. The complexity of our code at the socket level reflects the difficulty of undoing all that design. For instance, after choosing to separate Ethernet and Wi-Fi, extraordinary effort (both coding and execution) is spent making sure packets aren't received in the wrong adapter. The irony of this code is that if it ever finds that an adapter has received the wrong type of packet, it can only drop it on the floor, which Is exactly the wrong thing to do. All of the code would be simpler and more maintainable by eliminating the adapter distinction. In place of distinguishing adapter types, we need to distinguish between and allow selection of specific interfaces. This will add complication, but the complexity can be largely countered by removing the distinction between adapter types. If we think of IoTivity as a living code base instead of a static monument, we need to eliminate duplication. Getting rid of the difference between Ethernet and Wi-Fi will be a good first step. Then we need to eliminate the difference between single- and multiple-threading, since that duplication has the same deleterious effects of software quality. (I believe minor changes to the threading model will allow both to share the same code.) If we don't make these changes, I don't believe we can support a quality, living code base, which I see as essential to our success. John Light Intel OTC OIC Development -----Original Message----- From: iotivity-dev-bounces at lists.iotivity.org <mailto:iotivity-dev-bounces at lists.iotivity.org> [mailto:[email protected]] On Behalf Of Kesavan, Vijay S Sent: Wednesday, March 18, 2015 8:22 AM To: Macieira, Thiago; iotivity-dev at lists.iotivity.org <mailto:iotivity-dev at lists.iotivity.org> Subject: Re: [dev] IPv6 changes to IoTivity Thiago, With regards to your comment: " whether the distinction between Ethernet and WiFi makes sense at all. Your work proves that it doesn't, so I'd like to see the distinction removed from the connectivity abstraction branch." Wondering if you are asking about the distinction between Ethernet and WiFi at the OIC API level or the connectivity abstraction layer level or perhaps both? At the OIC API level here is why the adaptors types are enumerated separately - when findResources returns, application is notified the adaptor type on which response was received (application can also select specific adaptor type when calling findResources). If the same resource is found on multiple adaptor types, the application can choose which adaptor is appropriate for further operations. For example, application might decide that certain operations can only be done on Ethernet or WiFi adaptor and not on WAN adaptors (on account of pricing policy), even though they are all IP adaptors. This assumes that connectivity abstraction is able to accurately distinguish between IP adaptors (not all OS/platforms support mechanisms to distinguish between Ethernet and WiFi). With regards to why the connectivity abstraction code has separate code paths for Ethernet and WiFi, I will defer to the contributors of the code to explain the rationale. Regards, --Vijay _______________________________________________ iotivity-dev mailing list iotivity-dev at lists.iotivity.org <mailto:iotivity-dev at lists.iotivity.org> https://lists.iotivity.org/mailman/listinfo/iotivity-dev _______________________________________________ iotivity-dev mailing list iotivity-dev at lists.iotivity.org <mailto:iotivity-dev at lists.iotivity.org> https://lists.iotivity.org/mailman/listinfo/iotivity-dev <http://ext.samsung.net/mailcheck/SeenTimeChecker?do=a89e2f31c590267ac28f68ff8a9a605d3ff78fb98fa509d0032aa89e99be1a3e88d6974bd2f79a3cb3b9c254041823979dd130b31b023ef15296970253332b3707805447a154a46fcf878f9a26ce15a0> -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.iotivity.org/pipermail/iotivity-dev/attachments/20150324/e314a265/attachment.html> -------------- next part -------------- A non-text attachment was scrubbed... Name: image001.png Type: image/png Size: 65706 bytes Desc: not available URL: <http://lists.iotivity.org/pipermail/iotivity-dev/attachments/20150324/e314a265/attachment.png> -------------- next part -------------- A non-text attachment was scrubbed... Name: image002.gif Type: image/gif Size: 13168 bytes Desc: not available URL: <http://lists.iotivity.org/pipermail/iotivity-dev/attachments/20150324/e314a265/attachment.gif> -------------- next part -------------- A non-text attachment was scrubbed... Name: smime.p7s Type: application/pkcs7-signature Size: 7198 bytes Desc: not available URL: <http://lists.iotivity.org/pipermail/iotivity-dev/attachments/20150324/e314a265/attachment.p7s>
