lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <61D8D34BB13CFE408D154529C120E07903231FED@eseldmw101.eemea.ericsson.se>
Date:	Fri, 22 Jan 2010 09:18:42 +0100
From:	Sjur Brændeland <sjur.brandeland@...ricsson.com>
To:	"Marcel Holtmann" <marcel@...tmann.org>
Cc:	<netdev@...r.kernel.org>, <davem@...emloft.net>,
	<stefano.babic@...ic.homelinux.org>, <randy.dunlap@...cle.com>
Subject: RE: [PATCH net-next-2.6 02/13] net-caif: add CAIF header files

Hi Marcel.

Marcel Holtmann wrote:
>> +/**
>> + * struct sockaddr_caif - the sockaddr structure for CAIF sockets.
>> + * @u:			     Union of address data 'switched' by familty.
>> + * @at:			     Applies when family = CAIFPROTO_AT.
>> + * @at.type:		     Type of AT link to set up (enum caif_at_type).
>> + * @util:		     Applies when family = CAIFPROTO_UTIL
>> + * @util.service:	     Service name.
>> + * @dgm:		     Applies when family = CAIFPROTO_DATAGRAM
>> + * @dgm.connection_id:	     Datagram connection id.
>> + * @dgm.nsapi:		     NSAPI of the PDP-Context.
>> + * @rfm:		     Applies when family = CAIFPROTO_RFM
>> + * @rfm.connection_id:       Connection ID for RFM.
>> + * @rfm.volume:	     	     Volume to mount.
>> + */
>> +struct sockaddr_caif {
>> +	sa_family_t  family;
>> +	union {
>> +		struct {
>> +			u_int8_t  type;		/* type: enum caif_at_type */
>> +		} at;				/* CAIFPROTO_AT */
>> +		struct {
>> +			char	  service[16];
>> +		} util;				/* CAIFPROTO_UTIL */
>> +		union {
>> +			u_int32_t connection_id;
>> +			u_int8_t  nsapi;
>> +		} dgm;				/* CAIFPROTO_DATAGRAM(_LOOP)*/
>> +		struct {
>> +			u_int32_t connection_id;
>> +			char	  volume[16];
>> +		} rfm;				/* CAIFPROTO_RFM */
>> +	} u;
>> +};
> 
> as mentioned on the oFono mailing list, what is the right procedure
> to select a local CAIF device for usage with doing bing(). The use
> case I am thinking of is that you have multiple CAIF device attached
> to the same system. Think of desktops with USB or even Dual-SIM
> phones. Before we set the API in stone, we need to have a way o bind
> the socket to a specific device. Maybe it is possible, but I am
> missing it.      

The CAIF interface can be selected by using the following types:
[snip caif_config.h]
/**
 * enum caif_phy_preference  - Types of physical HW interfaces
 *				       towards modem defined in CAIF stack
 * @CAIF_PHYPREF_UNSPECIFIED:	Default physical interface
 * @CAIF_PHYPREF_LOW_LAT:	Default physical interface for low-latency
 *				      traffic
 * @CAIF_PHYPREF_HIGH_BW:	Default physical interface for high-bandwidth
 *				      traffic
 * @CAIF_PHYPREF_LOOP:		TEST Loopback interface, simulating modem
 *				      responses
 *
 * For client convenience, two special types are defined:
 * CAIF_PHYPREF_LOW_LAT is the preferred low-latency physical link.
 * Typically used for "control" purposes.
 * CAIF_PHYPREF_HIGH_BW is the preferred high-bandwidth physical link.
 * Typically used for "payload" purposes.
 */
...
enum caif_phy_preference {
	CAIF_PHYPREF_UNSPECIFIED,
	CAIF_PHYPREF_LOW_LAT,
	CAIF_PHYPREF_HIGH_BW,
	CAIF_PHYPREF_LOOP
};
[snip caif_socket.h]
...
/**
 * struct caif_channel_opt - CAIF channel connect options.
 * @priority:		Priority of the channel (between 0 and 0x1f)
 * @link_selector:	Selector for the physical link.
 *			      (see enum caif_phy_preference in caif_config.h)
 * @link_name:		Physical link to use. This is the instance name of the
 *			      CAIF Physical Driver.
 */
struct caif_channel_opt {
	u_int16_t  priority;
	u_int16_t  link_selector;
	char	   link_name[16];
};
...
/** enum caif_socket_opts - CAIF option values for getsockopt and setsockopt
 * @CAIFSO_CHANNEL:		Used to set the connect options on a CAIF
 *				socket. (struct caif_config_opt). This can only
 *				be set before connecting.
[end snip]

CAIFSO_CHANNEL is used for specifying the physical interface to use for the 
CAIF Channel. You can select the type of interface to use
by setting link_selector:
CAIF_PHYPREF_LOW_LAT will typically be used for AT (or other control traffic),
and CAIF_PHYPREF_HIGH_BW for IP traffic.
When the CAIF interfaces registers itself it will inform about their type,
(low-latency or high-bandwidth). This approach assumes that you have only one
modem, but multiple links to it (e.g. USB and UART). 

But you can also specify interface by name using link_name. In this case
you specify the name of the interface to use. I think this would support
your use case with multiple modems attached.

BR/Sjur
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ