# d2d-manager To test d2d-manager and sample apps, you must build iotivity locally with following modifications: ### 1. build_common/SConscript ```sh defines.append('-DMULTIPLE_OWNER=1') ``` ### 2. packaging/iotivity.spec ```sh --- a/packaging/iotivity.spec +++ b/packaging/iotivity.spec @@ -1,6 +1,6 @@ Name: iotivity Version: 1.2.1 -Release: 0 +Release: 9 Summary: Samsung IoT Connectivity Group: Network & Connectivity / IoT Connectivity License: Apache-2.0 @@ -37,7 +37,7 @@ Source1002: %{name}-test.manifest # default is RELEASE mode. # If DEBUG mode is needed, please use tizen_build_devel_mode -%define RELEASE True +%define RELEASE False # For Example %if %{RELEASE} == "True" %define build_mode release @@ -89,7 +89,7 @@ Source1002: %{name}-test.manifest %{!?BLE_CUSTOM_ADV: %define BLE_CUSTOM_ADV False} %{!?BLE_DIVISION: %define BLE_DIVISION VD} %{!?BLE_TIZEN_30: %define BLE_TIZEN_30 True} -%{!?MULTIPLE_OWNER: %define MULTIPLE_OWNER 0} +%{!?MULTIPLE_OWNER: %define MULTIPLE_OWNER 1} BuildRequires: expat-devel BuildRequires: python, libcurl-devel @@ -194,7 +194,7 @@ scons %{JOB} --prefix=%{_prefix} \ mkdir -p %{buildroot}/%{_datadir}/license cp LICENSE %{buildroot}/%{_datadir}/license/%{name} %endif -rm -rf %{buildroot} +#rm -rf %{buildroot} CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; scons install --install-sandbox=%{buildroot} --prefix=%{_prefix} \ ES_TARGET_ENROLLEE=%{ES_TARGET_ENROLLEE} \ @@ -259,6 +259,14 @@ cp ./resource/csdk/security/include/*.h %{buildroot}%{_includedir} cp ./resource/csdk/connectivity/api/*.h %{buildroot}%{_includedir}/ cp ./resource/csdk/security/include/internal/*.h %{buildroot}%{_includedir}/ cp ./resource/csdk/security/provisioning/include/oxm/*.h %{buildroot}%{_includedir} +cp out/%{TARGET_OS}/%{TARGET_ARCH}/%{build_mode}/resource/csdk/security/provisioning/sample/provisioningclient %{ex_install_dir}/provision-sample/ +cp ./resource/csdk/security/provisioning/sample/oic_svr_db_client.dat %{ex_install_dir}/provision-sample/ +%if 0%{MULTIPLE_OWNER} == 1 +cp out/%{TARGET_OS}/%{TARGET_ARCH}/%{build_mode}/resource/csdk/security/provisioning/sample/subownerclient %{ex_install_dir}/provision-sample/ +cp ./resource/csdk/security/provisioning/sample/oic_svr_db_subowner_client.dat %{ex_install_dir}/provision-sample/ +cp out/%{TARGET_OS}/%{TARGET_ARCH}/%{build_mode}/resource/csdk/security/provisioning/sample/sampleserver_preconfpin %{ex_install_dir}/provision-sample/ +cp ./resource/csdk/security/provisioning/sample/oic_svr_db_server_preconfpin.dat %{ex_install_dir}/provision-sample/ +%endif cp ./resource/csdk/security/provisioning/include/internal/*.h %{buildroot}%{_includedir} cp ./resource/csdk/security/provisioning/include/*.h %{buildroot}%{_includedir} cp ./resource/csdk/security/provisioning/sample/oic_svr_db_server_justworks.dat %{buildroot}%{_libdir}/oic_svr_db_server.dat @@ -286,7 +294,7 @@ ln -fs ../resource %{buildroot}%{_includedir}/iotivity/ ``` ### 3. policyengine.c ```sh --- a/resource/csdk/security/src/policyengine.c +++ b/resource/csdk/security/src/policyengine.c @@ -192,7 +192,7 @@ static bool IsRequestFromSubOwner(PEContext_t *context) */ static bool IsValidRequestFromSubOwner(PEContext_t *context) { - bool isValidRequest = false; + bool isValidRequest = true; if(NULL == context) { @@ -294,7 +294,7 @@ bool IsRequestFromResourceOwner(PEContext_t *context) { if(OC_STACK_OK == GetSvrRownerId[(int)context->resourceType](&resourceOwner)) { - retVal = UuidCmp(&context->subject, &resourceOwner); + retVal = true;//UuidCmp(&context->subject, &resourceOwner); } } ``` ### 4. provisioningdatabasemanager.c ```sh --- a/resource/csdk/security/provisioning/src/provisioningdatabasemanager.c +++ b/resource/csdk/security/provisioning/src/provisioningdatabasemanager.c @@ -44,7 +44,7 @@ #define PDM_BIND_INDEX_THIRD 3 #define PDM_CREATE_T_DEVICE_LIST "create table T_DEVICE_LIST(ID INTEGER PRIMARY KEY AUTOINCREMENT,\ - UUID BLOB NOT NULL UNIQUE, STATE INT NOT NULL);" + UUID BLOB NOT NULL, STATE INT NOT NULL);" #define PDM_CREATE_T_DEVICE_LINK "create table T_DEVICE_LINK_STATE(ID INT NOT NULL, ID2 INT NOT \ NULL,STATE INT NOT NULL, PRIMARY KEY (ID, ID2));" ``` ### 5. octypes.h ```sh --- a/resource/csdk/stack/include/octypes.h +++ b/resource/csdk/stack/include/octypes.h @@ -1052,7 +1052,9 @@ typedef enum OC_STACK_SERVICE_UNAVAILABLE, /** 503*/ OC_STACK_GATEWAY_TIMEOUT, /** 504*/ OC_STACK_PROXY_NOT_SUPPORTED, /** 505*/ - +#ifdef MULTIPLE_OWNER + OC_STACK_LINK_ALREADY_EXIST, +#endif /** ERROR in stack.*/ OC_STACK_ERROR = 255 /** Error status code - END HERE.*/ ``` ### 6. multipleownershiptransfermanager.c ```sh --- a/resource/csdk/security/provisioning/src/multipleownershiptransfermanager.c +++ b/resource/csdk/security/provisioning/src/multipleownershiptransfermanager.c @@ -652,14 +652,14 @@ OCStackResult MOTAddPreconfigPIN(const OCProvisionDev_t *targetDeviceInfo, VERIFY_NON_NULL(TAG, preconfPIN, ERROR); VERIFY_SUCCESS(TAG, (0 != preconfPINLen), ERROR); VERIFY_SUCCESS(TAG, (0 != preconfPINLen && OXM_PRECONFIG_PIN_MAX_SIZE >= preconfPINLen), ERROR); - +#if 0 OicSecCred_t* prevCred = GetCredResourceData(&targetDeviceInfo->doxm->deviceID); if(NULL != prevCred) { OIC_LOG(INFO, TAG, "PIN/PW Credential already exist!"); return OC_STACK_OK; } - +#endif addCredRes = OC_STACK_NO_MEMORY; //Generate PIN based credential pinCred = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t)); ``` After iotivity build succeeds, copy the following package to GBS-ROOT. * iotivity-1.2.1-9.armv7l.rpm * iotivity-devel-1.2.1-9.armv7l.rpm **Example** ```sh ~/GBS-ROOT/unified-standard/local/repos/unified_standard/armv7l/RPMS/ ``` # build script If you want to build and install the d2d manager easily, use the following guide. ### 1. modify git path variable in {git_path}/material/script/d2d_build.sh & d2d_install.sh script ex) git_path="/data/workspace/d2d-manager" ### 2. copy install script in /usr/bin ex) sudo cp d2d_install.sh /usr/bin ### 3. execute d2d_install.sh ex) $ d2d_install.sh # How to test d2d-subowner **Assumption)** We have 2~3 physical devices such as TM1 or U3. Our devices are in same IP subnet. **Pre-conditions)** Execute 2 sampleserver_justworks which has Preconfigured PIN security option (key. 12341234) **Example)** At physical device#1, run sampleserver_justworks (ex. its uuid: 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4) At physical device#2, run sampleserver_justworks (ex. 2nd server's uuid: e4854ed5-65d1-4cc7-8766-3fb7a35e283a) ## Test Method) At physical device#2, we execute mdbus2 like below ### 1. Enable d2d-subowner ```sh sh-3.2# mdbus2 -s -i MDBUS2> net.d2ds.enabler /net/d2ds/enabler net.d2ds.enabler.enable (0,) ``` ```sh saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER 01-01 10:23:35.029+0900 D/D2D_SUBOWNER(14781): d2ds.c: main(40) > Enter 01-01 10:23:35.030+0900 I/D2D_SUBOWNER(14781): d2ds.c: main(53) > service mainloop start 01-01 10:23:35.030+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: d2ds_service_interface_init(455) > Enter 01-01 10:23:35.032+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: d2ds_service_interface_init(464) > Quit 01-01 10:23:35.045+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_on_activator_bus_acquired(370) > Enter 01-01 10:23:35.046+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_on_activator_bus_acquired(391) > Quit 01-01 10:23:35.056+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_on_name_acquired(305) > Acquired the name net.d2ds 01-01 10:23:35.063+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_handle_enable(315) > Enter 01-01 10:23:35.526+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_handle_enable(331) > Quit ``` ### 2. Get d2d-subowner's device ID ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.get_ownerid ('e5d11e8c-7e04-0e9f-fe9f-4bc362f94318', 0) ``` ```sh saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER 01-01 10:23:42.626+0900 D/D2D_SUBOWNER(14781): d2ds-subowner.c: d2ds_request_get_ownerid(1525) > [IPC] Get Device ID ``` ### 3. Find MOT enabled devices in a network ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.disc_mot_enb_devs (0,) ``` ```sh saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER 01-01 09:07:40.351+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: d2ds_request_disc_mot_enb_devs(1400) > [IPC] Discovery MOT enabled devices 01-01 09:07:40.351+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _disc_mot_env_devs_func(672) > Discovering Multiple Ownership Transfer enabled Devices on Network.. 01-01 09:07:44.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [1] 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4 01-01 09:07:44.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [2] e4854ed5-65d1-4cc7-8766-3fb7a35e283a 01-01 09:07:44.358+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: __notify_found_devs(590) > Found 2 MOT enabled devices 01-01 09:07:44.359+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: __notify_found_devs(633) > ?doxms? ``` ```sh saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb shell dbus-monitor --system "sender='net.d2ds'" method return time=1515149361.403747 sender=:1.50 -> destination=:1.49 serial=29 reply_serial=29 int32 0 signal time=1515149365.404783 sender=:1.50 -> destination=(null destination) serial=30 path=/net/d2ds; interface=net.d2ds; member=disc_mowned_devs_done array [ array [ dict entry( string "deviceId" variant string "e5d11e8c-7e04-0e9f-fe9f-4bc362f94318" ) dict entry( string "adapter" variant uint32 1 ) dict entry( string "flags" variant int32 32 ) dict entry( string "port" variant uint16 59190 ) dict entry( string "addr" variant string "fe80::7edd:90ff:feb1:1c53%wlan0" ) dict entry( string "ifindex" variant int32 0 ) dict entry( string "routeData" variant string "" ) dict entry( string "connType" variant uint32 65568 ) dict entry( string "securePort" variant uint16 35114 ) dict entry( string "tcpPort" variant uint16 49193 ) dict entry( string "secVer" variant string "0.0.0" ) dict entry( string "devStatus" variant uint32 1 ) ] ] ``` ### 4. MOT sampleserver_justworks in device#1 ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.mot 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4 12341234 (0,) ``` ### 5. MOT sampleserver_justworks in device#2 ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.mot e4854ed5-65d1-4cc7-8766-3fb7a35e283a 12341234 (0,) ``` ### 6. Find owned devices in a network ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.disc_mowned_devs (0,) ``` ```sh saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER 01-01 09:08:21.418+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: d2ds_request_disc_owned_devs(1420) > [IPC] Discovery Owned devices using MOT 01-01 09:08:21.418+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: _disc_owned_devs_func(721) > Discovering Multiple Owned Devices on Network. 01-01 09:08:25.419+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_dev_list(295) > Device List is Empty.. 01-01 09:08:25.419+0900 I/D2D_SUBOWNER( 4721): 01-01 09:08:30.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [1] 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4 01-01 09:08:30.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [2] e4854ed5-65d1-4cc7-8766-3fb7a35e283a 01-01 09:08:30.358+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: __notify_found_devs(590) > Found 2 MOT enabled devices ``` ### 7. ACL Provisioning sampleserver_justworks in device#1 ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.prov_acl e4854ed5-65d1-4cc7-8766-3fb7a35e283a 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4 /a/led core.led oic.if.baseline 31 (0,) ``` ### 8. ACL Provisioning sampleserver_justworks in device#2 ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.prov_acl 7ad10436-525b-4f4c-890b-84a0f3ad66aa e4854ed5-65d1-4cc7-8766-3fb7a35e283a /a/led core.led oic.if.baseline 31 (0,) ``` ### 9. Make both sampleserver_justworks pairwise ```sh MDBUS2> net.d2ds /net/d2ds net.d2ds.prov_cred f9dfa1a0-f989-4c31-a08c-32b0d0178058 c520f48f-ed51-4986-8c45-47bfb7e8d8bc (0,) ``` ```sh saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER 01-01 10:09:12.288+0900 D/D2D_SUBOWNER(13505): d2ds-subowner.c: d2ds_request_prov_cred(1304) > [IPC] Provisioning Credential 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _print_uuid(187) > 7b6a3d68-d9cb-4197-bb1f-631fb908f140 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _print_uuid(187) > 4dc9c08c-c20f-4cd7-9861-0a90a6d773e0 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _print_uuid(187) > 7b6a3d68-d9cb-4197-bb1f-631fb908f140 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _cred_provisioning_func(1099) > Provisioning Selected Pairwise Devices.. 01-01 10:09:12.829+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _cred_provisioning_func(1115) > > Provisioned Selected Pairwise Devices ```