platform/upstream/connman.git
12 years agogsupplicant: Implement network properties changes notification
Samuel Ortiz [Thu, 8 Sep 2011 06:00:49 +0000 (08:00 +0200)]
gsupplicant: Implement network properties changes notification

This is only used for propagatong signal changes for now.

12 years agogsupplicant: Track best signal and the corresponding BSS
Samuel Ortiz [Thu, 8 Sep 2011 05:30:42 +0000 (07:30 +0200)]
gsupplicant: Track best signal and the corresponding BSS

12 years agodevice: Remove device_probe and device_remove
Samuel Ortiz [Thu, 8 Sep 2011 06:18:29 +0000 (08:18 +0200)]
device: Remove device_probe and device_remove

They're tiny and useless wrappers.

12 years agotechnology: Disable tethering only when no technology is tethering
Patrik Flykt [Fri, 2 Sep 2011 10:34:58 +0000 (13:34 +0300)]
technology: Disable tethering only when no technology is tethering

When notifying that a technology is not tethering anymore, go
through the list of technologies and disable tethering only if
no other technology is tethering.

12 years agodevice: Set PENDING_DISABLE on device disable
Patrik Flykt [Fri, 2 Sep 2011 10:34:57 +0000 (13:34 +0300)]
device: Set PENDING_DISABLE on device disable

Set powered pending state to PENDING_DISABLE when the device is
being disabled.

12 years agodevice: Simplify device_pending_reset()
Patrik Flykt [Fri, 2 Sep 2011 10:34:56 +0000 (13:34 +0300)]
device: Simplify device_pending_reset()

The g_source for device_pending_reset() is going to be removed when
the callback function returns FALSE. Thus simplify the code with a
few lines.

12 years agotechnology: When disabling technology, disble tethering too
Patrik Flykt [Fri, 2 Sep 2011 10:34:52 +0000 (13:34 +0300)]
technology: When disabling technology, disble tethering too

12 years agotechnology: Move bridege checking to set_tethering()
Patrik Flykt [Fri, 2 Sep 2011 10:34:53 +0000 (13:34 +0300)]
technology: Move bridege checking to set_tethering()

Move bridge checking into set_tethering(), as the bridge
information is not used elsewhere.

12 years agodnsproxy: Use listener data instead of hash table lookups
Patrik Flykt [Mon, 5 Sep 2011 06:21:27 +0000 (08:21 +0200)]
dnsproxy: Use listener data instead of hash table lookups

Pass around struct listener_data instead of always looking it up
via interface from hash table. There are no changes for exported
functions.

12 years agodnsproxy: Fix __connman_dnsproxy_add_listener() error handling
Patrik Flykt [Mon, 5 Sep 2011 06:19:19 +0000 (08:19 +0200)]
dnsproxy: Fix __connman_dnsproxy_add_listener() error handling

Do not add dnsproxy listener data to hash table if we fail to
create either a udp or tcp listener.

12 years agoservice: Filter Adding WPS to the Security Array
Grant Erickson [Mon, 5 Sep 2011 05:31:34 +0000 (07:31 +0200)]
service: Filter Adding WPS to the Security Array

Some access points incorrectly advertise WPS even when they are
configured as open (i.e. no security), so filter adding WPS to the
security array appropriately.

12 years agotimezone: Do not access already released memory
Jukka Rissanen [Wed, 31 Aug 2011 08:42:44 +0000 (11:42 +0300)]
timezone: Do not access already released memory

closedir() releases the filename but we were accessing it later.

12 years agomain: Memory leak in option_debug
Jukka Rissanen [Wed, 31 Aug 2011 12:13:01 +0000 (15:13 +0300)]
main: Memory leak in option_debug

12 years agogsupplicant: Do not access IE array past end of buffer
Jukka Rissanen [Wed, 31 Aug 2011 11:50:10 +0000 (14:50 +0300)]
gsupplicant: Do not access IE array past end of buffer

IE list was traversed past buffer limit in the last round.

12 years agotest: Fix dbus path in service-move-before script
Jukka Rissanen [Wed, 31 Aug 2011 10:15:34 +0000 (13:15 +0300)]
test: Fix dbus path in service-move-before script

Because of patch f8ef8b2a7f7ef1bd9e26df6cfb19a838e6b10b17 that removed
profile support, the path needs to be changed.

12 years agogresolv: Fix buffer size
Jukka Rissanen [Wed, 31 Aug 2011 08:43:46 +0000 (11:43 +0300)]
gresolv: Fix buffer size

Make buf just big enough and initialize it in order to get
rid of valgrind error (accessing uninitialized memory).

12 years agoservice: Behave properly when RequestInput is cancelled
Patrik Flykt [Mon, 5 Sep 2011 04:21:04 +0000 (06:21 +0200)]
service: Behave properly when RequestInput is cancelled

Do the same actions on cancelling RequestInput as when
not retrying a service on ReportError.

Re-fixes BMC#22542.

12 years agoservice: Do not allow service to be moved before a VPN service
Jukka Rissanen [Fri, 26 Aug 2011 08:33:24 +0000 (11:33 +0300)]
service: Do not allow service to be moved before a VPN service

This is needed as the default routes are not set properly
if we allow a service to be moved before a VPN service.

12 years agostats: Move stat files to respective service identifier directory
Alok Barsode [Wed, 24 Aug 2011 13:53:20 +0000 (16:53 +0300)]
stats: Move stat files to respective service identifier directory

12 years agostorage: Switch to <service_id> directories
Alok Barsode [Thu, 25 Aug 2011 13:52:17 +0000 (16:52 +0300)]
storage: Switch to <service_id> directories

Service settings would now reside in /var/lib/connman/service_id/settings.
we fallback on /var/lib/connman/default.profile for a smooth transition.

12 years agostorage: Switch to settings file
Alok Barsode [Wed, 24 Aug 2011 13:53:18 +0000 (16:53 +0300)]
storage: Switch to settings file

All the global settings would reside in /var/lib/connman/settings.
We also migrate global keys from /var/lib/connman/default.profile
to /var/lib/connman/settings for a smooth transition.

12 years agoservice: Add NULL check
Jukka Rissanen [Wed, 24 Aug 2011 14:02:07 +0000 (17:02 +0300)]
service: Add NULL check

12 years agonetwork: Add NULL check
Jukka Rissanen [Wed, 24 Aug 2011 14:02:06 +0000 (17:02 +0300)]
network: Add NULL check

12 years agoconnection: Service was not ref counted properly
Jukka Rissanen [Wed, 24 Aug 2011 14:02:05 +0000 (17:02 +0300)]
connection: Service was not ref counted properly

The reference counting problems were clearly seen with VPN service.

12 years agoprovider: Return existing service path if already connected
Jukka Rissanen [Wed, 24 Aug 2011 14:02:04 +0000 (17:02 +0300)]
provider: Return existing service path if already connected

12 years agoprovider: Add ref counting debug
Jukka Rissanen [Wed, 24 Aug 2011 14:02:03 +0000 (17:02 +0300)]
provider: Add ref counting debug

12 years agoservice: Set the service state to IDLE if method is off or unknown
Jukka Rissanen [Wed, 24 Aug 2011 14:02:02 +0000 (17:02 +0300)]
service: Set the service state to IDLE if method is off or unknown

12 years agoservice: Fix state combining
Jukka Rissanen [Wed, 24 Aug 2011 14:02:01 +0000 (17:02 +0300)]
service: Fix state combining

If we have IPv6 state as DISCONNECT and IPv4 state as
ONLINE or READY then we are not disconnected.

12 years agoservice: Change the debug print location to be more useful
Jukka Rissanen [Wed, 24 Aug 2011 14:02:00 +0000 (17:02 +0300)]
service: Change the debug print location to be more useful

12 years agoservice: Fix function name as it is static
Jukka Rissanen [Wed, 24 Aug 2011 14:01:59 +0000 (17:01 +0300)]
service: Fix function name as it is static

12 years agoservice: Set the user connect status correctly for VPN
Jukka Rissanen [Wed, 24 Aug 2011 14:01:58 +0000 (17:01 +0300)]
service: Set the user connect status correctly for VPN

If the userconnect is not set, then informatation about authentication
errors cannot be reported by agent API.

12 years agonetwork: Change the service disconnect state when necessary
Jukka Rissanen [Wed, 24 Aug 2011 14:01:57 +0000 (17:01 +0300)]
network: Change the service disconnect state when necessary

If we are in idle or failure states, then we should not change to
disconnect state when the service is disconnected. This is because we
were not connected in the first place.

12 years agoservice: Add function to get the ipconfig state
Jukka Rissanen [Wed, 24 Aug 2011 14:01:56 +0000 (17:01 +0300)]
service: Add function to get the ipconfig state

12 years agovpn: Set authentication failure error code properly in provider
Jukka Rissanen [Wed, 24 Aug 2011 14:01:55 +0000 (17:01 +0300)]
vpn: Set authentication failure error code properly in provider

This patch is needed so that we can catch the authentication
error from vpn driver and inform the failure to user.

12 years agoprovider: NULL pointer check
Jukka Rissanen [Wed, 24 Aug 2011 14:01:54 +0000 (17:01 +0300)]
provider: NULL pointer check

12 years agobuild: Disable building of iwmx and iospm by default
Marcel Holtmann [Tue, 30 Aug 2011 21:55:49 +0000 (14:55 -0700)]
build: Disable building of iwmx and iospm by default

12 years agonmcompat: Update with new NetworkManager connection states
Marcel Holtmann [Tue, 30 Aug 2011 21:55:03 +0000 (14:55 -0700)]
nmcompat: Update with new NetworkManager connection states

12 years agobuild: Fix generating links in Makefile.am
Marcel Holtmann [Tue, 30 Aug 2011 18:37:14 +0000 (11:37 -0700)]
build: Fix generating links in Makefile.am

12 years agoservice: Check NULL pointer when setting ipconfig
Jukka Rissanen [Fri, 26 Aug 2011 12:10:51 +0000 (15:10 +0300)]
service: Check NULL pointer when setting ipconfig

Fixes BMC#22766

12 years agonetwork: Read only the ipconfig data if we have no address
Jukka Rissanen [Fri, 26 Aug 2011 11:43:10 +0000 (14:43 +0300)]
network: Read only the ipconfig data if we have no address

We must not read ipconfig data from file if there is already a valid
address that was set by service set_property().

Fixes BMC#22767

12 years agodevice: Remove power pending timeout iff there is a pending request
Samuel Ortiz [Thu, 25 Aug 2011 15:34:06 +0000 (17:34 +0200)]
device: Remove power pending timeout iff there is a pending request

In the ethernet case, there won't be any.

12 years agostorage: remove storage module framework
Alok Barsode [Wed, 24 Aug 2011 13:44:27 +0000 (16:44 +0300)]
storage: remove storage module framework

12 years agoservice: Directly use service load/save functions
Alok Barsode [Wed, 24 Aug 2011 19:36:26 +0000 (21:36 +0200)]
service: Directly use service load/save functions

12 years agostorage: Remove technology state load/save methods from storage module
Alok Barsode [Wed, 24 Aug 2011 13:44:25 +0000 (16:44 +0300)]
storage: Remove technology state load/save methods from storage module

12 years agotest: Change path for services
Alok Barsode [Wed, 24 Aug 2011 13:44:24 +0000 (16:44 +0300)]
test: Change path for services

Since profile support was removed, the service path changes from
/profile/default to /net/connman/service/.

12 years agoprofile: Remove profile.c and profile.h
Alok Barsode [Wed, 24 Aug 2011 13:44:23 +0000 (16:44 +0300)]
profile: Remove profile.c and profile.h

12 years agoservice: Add services changed signal
Alok Barsode [Wed, 24 Aug 2011 13:44:22 +0000 (16:44 +0300)]
service: Add services changed signal

Move the services changed dbus signal handling from profile.

12 years agotechnology: Save/Load offlinemode
Alok Barsode [Wed, 24 Aug 2011 13:44:21 +0000 (16:44 +0300)]
technology: Save/Load offlinemode

Load/Save offlinemode in technology.c instead of profile.c.

12 years agodevice: Remove device persistent code
Alok Barsode [Wed, 24 Aug 2011 19:31:22 +0000 (21:31 +0200)]
device: Remove device persistent code

Connman now stores technology states persistently. Hence
there is no reason to store device states persistently.

12 years agodevice: Remove caching of offlinemode in device structure
Alok Barsode [Wed, 24 Aug 2011 13:44:19 +0000 (16:44 +0300)]
device: Remove caching of offlinemode in device structure

12 years agotechnology: Remove blocked variables and associated functions
Alok Barsode [Wed, 24 Aug 2011 19:26:56 +0000 (21:26 +0200)]
technology: Remove blocked variables and associated functions

12 years agorfkill: Add technology soft blocking API
Alok Barsode [Wed, 24 Aug 2011 13:44:17 +0000 (16:44 +0300)]
rfkill: Add technology soft blocking API

12 years agotechnology: Fix enable notifier to be invoked just once
Alok Barsode [Wed, 24 Aug 2011 13:44:16 +0000 (16:44 +0300)]
technology: Fix enable notifier to be invoked just once

When there are multiple devices, the technology enable notifier
was invoked multiple times. But when disabling the technology, the
disable notifier was invoked just once, hence there was a mismatch
in the technology states.

12 years agotechnology: Remove 'available' state
Alok Barsode [Wed, 24 Aug 2011 13:44:15 +0000 (16:44 +0300)]
technology: Remove 'available' state

The connman technology state machine is simplified.
It now has 3 states:
Offline: Technology is disabled.
Enabled: Technology is enabled.
Connected: Technology is connected.

12 years agotechnology: Redo offlinemode logic
Alok Barsode [Wed, 24 Aug 2011 13:44:14 +0000 (16:44 +0300)]
technology: Redo offlinemode logic

Traverse the list of technologies and enable/disable each instead of
traversing the device list.

12 years agotechnology: Save state persistently
Alok Barsode [Wed, 24 Aug 2011 13:44:13 +0000 (16:44 +0300)]
technology: Save state persistently

Save the technology state persistently. This will help in resuming
the technology state after offlinemode or during startup. This patch
just saves the states.

12 years agotechnology: Remove the global device hash
Alok Barsode [Wed, 24 Aug 2011 13:44:12 +0000 (16:44 +0300)]
technology: Remove the global device hash

There is a device list per technology. Hence removing the global
device hash.

12 years agotechnology: Remove global rfkill table
Alok Barsode [Wed, 24 Aug 2011 13:44:11 +0000 (16:44 +0300)]
technology: Remove global rfkill table

Remove the global rfkill_table and maintain a per technology
rfkill table.

12 years agotechnology: Modify technology enable/disable APIs
Alok Barsode [Wed, 24 Aug 2011 13:44:10 +0000 (16:44 +0300)]
technology: Modify technology enable/disable APIs

Add the pending dbus message per technology. Also move the pending
timeout from manager to technology.

12 years agodevice: Redo pending power request logic
Alok Barsode [Wed, 24 Aug 2011 13:44:09 +0000 (16:44 +0300)]
device: Redo pending power request logic

Use 3 values(None/Enable/Disable) for the power_pending.
It helps keep track of the ongoing pending request.
Add a pending timeout. If the daemon handling the device fails
to send a response then we need to reset the power_pending flag.

12 years agodevice: Update profile in enable_persistent callback
Alok Barsode [Wed, 24 Aug 2011 13:44:08 +0000 (16:44 +0300)]
device: Update profile in enable_persistent callback

12 years agotechnology: Refactor enable/disable APIs
Alok Barsode [Wed, 24 Aug 2011 13:44:07 +0000 (16:44 +0300)]
technology: Refactor enable/disable APIs

connman_technology_enable: Enable a technology. Enables all the
devices in the device_list of the technology.
connman_technology_enabled: Callback for connman_technology_enable.
Changes the state of the technology to ENABLED.
Ditto for connman_technology_disable/connman_technology_disabled.

12 years agowifi: Remove unused code
Jukka Rissanen [Wed, 24 Aug 2011 07:00:22 +0000 (10:00 +0300)]
wifi: Remove unused code

12 years agodevice: Device scan function made private
Jukka Rissanen [Wed, 24 Aug 2011 07:00:21 +0000 (10:00 +0300)]
device: Device scan function made private

The __connman_device_scan() is now static as it is only
called from device.c

12 years agoconnection: Default gateway is changed when reorganizing services
Jukka Rissanen [Wed, 24 Aug 2011 10:08:53 +0000 (12:08 +0200)]
connection: Default gateway is changed when reorganizing services

Fixes BMC#22540

12 years agotest: Script for testing service.MoveBefore interface
Jukka Rissanen [Wed, 24 Aug 2011 08:36:42 +0000 (11:36 +0300)]
test: Script for testing service.MoveBefore interface

12 years agoservice: Prefer online state over ready when comparing services
Jukka Rissanen [Wed, 24 Aug 2011 08:36:41 +0000 (11:36 +0300)]
service: Prefer online state over ready when comparing services

12 years agoservice: Allow state downgrade from online to ready
Jukka Rissanen [Wed, 24 Aug 2011 08:36:40 +0000 (11:36 +0300)]
service: Allow state downgrade from online to ready

12 years agoservice: Allow ready service to be moved before online one
Jukka Rissanen [Wed, 24 Aug 2011 08:36:39 +0000 (11:36 +0300)]
service: Allow ready service to be moved before online one

12 years agoservice: Ignore ipconfig that is not active when moving service
Jukka Rissanen [Wed, 24 Aug 2011 08:36:38 +0000 (11:36 +0300)]
service: Ignore ipconfig that is not active when moving service

12 years agoRelease 0.77 0.77
Marcel Holtmann [Tue, 23 Aug 2011 19:39:01 +0000 (12:39 -0700)]
Release 0.77

12 years agosession: Defer connect/disconnect calls
Daniel Wagner [Mon, 22 Aug 2011 12:58:02 +0000 (14:58 +0200)]
session: Defer connect/disconnect calls

When we call connect and disconnect a service we might
reenter the session state machine. So we should defer
these calls and finishing up the state change first.

12 years agosession: Update reason code on disconnect
Daniel Wagner [Mon, 22 Aug 2011 12:49:15 +0000 (14:49 +0200)]
session: Update reason code on disconnect

12 years agosession: reason2string return a string for unknown
Daniel Wagner [Mon, 22 Aug 2011 12:26:05 +0000 (14:26 +0200)]
session: reason2string return a string for unknown

12 years agosession: Fix selection of services
Daniel Wagner [Mon, 22 Aug 2011 12:24:18 +0000 (14:24 +0200)]
session: Fix selection of services

In case we didn't select a service (entry) reset the one
in the info (deselection). And then we have also take
a refence if the reason was CONNECT.

12 years agosession: Don't change ref count if reason code is set.
Daniel Wagner [Mon, 22 Aug 2011 11:37:08 +0000 (13:37 +0200)]
session: Don't change ref count if reason code is set.

If the reason code has been set the proper action has
been executed already.

12 years agosession: Handle service trigger according the reason code.
Daniel Wagner [Mon, 22 Aug 2011 11:34:43 +0000 (13:34 +0200)]
session: Handle service trigger according the reason code.

Instead of trying to figure out what we are supposed to do
we just rely on the reason code.

12 years agosession: Don't reset session if serivce was not selected
Daniel Wagner [Mon, 22 Aug 2011 11:16:04 +0000 (13:16 +0200)]
session: Don't reset session if serivce was not selected

12 years agosession: Update service state in all sessions
Daniel Wagner [Mon, 22 Aug 2011 11:16:03 +0000 (13:16 +0200)]
session: Update service state in all sessions

12 years agosession: Initialize service hash correctly
Daniel Wagner [Mon, 22 Aug 2011 11:16:02 +0000 (13:16 +0200)]
session: Initialize service hash correctly

12 years agoservice: Identation fix
Samuel Ortiz [Tue, 23 Aug 2011 14:28:04 +0000 (16:28 +0200)]
service: Identation fix

12 years agoservice: Save ipconfig in states where ipconfig is set up
Patrik Flykt [Mon, 22 Aug 2011 10:44:28 +0000 (13:44 +0300)]
service: Save ipconfig in states where ipconfig is set up

Service states unknown, idle and association do not have
valid ipconfig data configured. Do not save it in these states.

12 years agonetwork: Re-read ipconfig from service when setting manual addresses
Patrik Flykt [Mon, 22 Aug 2011 10:44:27 +0000 (13:44 +0300)]
network: Re-read ipconfig from service when setting manual addresses

When a service was disconnected, its ipconfig data was cleared.
Re-read service ipconfig data before setting manual addresses.

Fixes BMC#17738

12 years agoservice: Factor out reading ipconfigs from create functions
Patrik Flykt [Mon, 22 Aug 2011 10:44:26 +0000 (13:44 +0300)]
service: Factor out reading ipconfigs from create functions

Create new read functions for IPv4 and IPv6 from the code in
__connman_service_create_ip*config functions.

12 years agoconnection: Fix IPv6 host route setting when using VPN
Jukka Rissanen [Thu, 18 Aug 2011 07:07:51 +0000 (10:07 +0300)]
connection: Fix IPv6 host route setting when using VPN

12 years agoconnection: Fix indentation
Jukka Rissanen [Thu, 18 Aug 2011 07:07:50 +0000 (10:07 +0300)]
connection: Fix indentation

12 years agoloopback: Remove dead code
Samuel Ortiz [Wed, 17 Aug 2011 15:32:53 +0000 (17:32 +0200)]
loopback: Remove dead code

12 years agoservice: Propagate user proxy changes
Samuel Ortiz [Wed, 17 Aug 2011 15:27:03 +0000 (17:27 +0200)]
service: Propagate user proxy changes

Notify proxy_changed listeners when Proxy.Configuration is set/changed.

12 years agoservice: Properly disconnect network or provider on connect failure
Patrik Flykt [Wed, 17 Aug 2011 09:47:05 +0000 (12:47 +0300)]
service: Properly disconnect network or provider on connect failure

Correctly check whether a service has a network or a VPN provider
associated with it if the service fails already in
__connman_service_connect().

12 years agotask: Reset forked process signal mask
Yu A Wang [Wed, 17 Aug 2011 08:04:32 +0000 (04:04 -0400)]
task: Reset forked process signal mask

The forked process inherits connmand's signal mask and thus has TERM and
INT blocked. As a consequence it can not be killed properly if the signal
mask is not reset.

12 years agoconnection: Fix vpn on networks without gateway
Yu A Wang [Wed, 17 Aug 2011 08:04:18 +0000 (04:04 -0400)]
connection: Fix vpn on networks without gateway

VPN establishment fails on gateway less networks, like for example ppp
based cellular ones. To fix that, a host route to the VPN server is
established.

12 years agoservice: Fix wrong DNS server ip after VPN connection
Yu A Wang [Fri, 12 Aug 2011 06:43:26 +0000 (02:43 -0400)]
service: Fix wrong DNS server ip after VPN connection

We need to call default_changed function for ONLINE state after
profile changed, else get_default function will return the previous
service, this will lead to we have wrong DNS after VPN connection

12 years agoconnection: Set proper gateway for ppp links
Yu A Wang [Fri, 12 Aug 2011 06:42:16 +0000 (02:42 -0400)]
connection: Set proper gateway for ppp links

The default gateway for ppp connection should be 0.0.0.0 for ipv4
and :: for ipv6. This issue fixed before but removed by the commit
84a739d0082b89efa8cfbf376abe17937e4bc843

12 years agoplugin: Use weak reference for external debug statements
Marcel Holtmann [Tue, 16 Aug 2011 16:14:53 +0000 (09:14 -0700)]
plugin: Use weak reference for external debug statements

12 years agoplugin: Use simpler version mismatch error
Marcel Holtmann [Mon, 15 Aug 2011 23:22:31 +0000 (16:22 -0700)]
plugin: Use simpler version mismatch error

12 years agoplugin: Add debug support for external plugins
Marcel Holtmann [Mon, 15 Aug 2011 23:08:26 +0000 (16:08 -0700)]
plugin: Add debug support for external plugins

12 years agolog: Use separate function for enable logging
Marcel Holtmann [Mon, 15 Aug 2011 23:07:28 +0000 (16:07 -0700)]
log: Use separate function for enable logging

12 years agomanager: Defer return of setting session mode if not idle
Daniel Wagner [Thu, 11 Aug 2011 14:56:18 +0000 (16:56 +0200)]
manager: Defer return of setting session mode if not idle

12 years agonotify: Add state_idle()
Daniel Wagner [Thu, 11 Aug 2011 14:56:18 +0000 (16:56 +0200)]
notify: Add state_idle()

12 years agosession: Allways allow set session mode
Daniel Wagner [Thu, 11 Aug 2011 14:56:18 +0000 (16:56 +0200)]
session: Allways allow set session mode

If the unit test framework crashes it can happen that the session mode
is still enabled but we have a connected service. So if the unit test
restarted we wont disconnect all services and therefore block for
ever. Since it is safe to call __connman_service_disconnect_all()
again there is no need to disallow this operation.