Enhanced protocol socket domain

An enhanced address domain is presented herein. A system can comprise a processor; and a memory that stores executable instructions that, when executed by the processor, facilitate performance of operations, comprising: creating an upper-layer socket of an enhanced address domain; allocating a protocol control block (PCB) and associating the PCB with the upper-layer socket—the PCB storing information representing a private state of the upper-layer socket; creating a lower-layer socket of an existing address domain—the lower-layer socket referenced from the upper-layer socket using the PCB; and installing upcall(s) on the lower-layer socket to be intercepted via the enhanced address domain. In an aspect, the upper-layer socket supports enhancement(s) to the existing address domain and a socket type of the lower-layer socket.

TECHNICAL FIELD

The subject disclosure generally relates to embodiments for an enhanced protocol socket domain.

BACKGROUND

Conventional server technologies utilize existing APIs to obtain information about network connections. However, use of such APIs is not free, i.e., they consume a reasonable amount of central processing overhead. Further, a limited amount of information about the network connections, i.e., related to network sockets, is made available through existing APIs. In this regard, conventional server technologies have had some drawbacks with respect to providing access to network socket based information.

DETAILED DESCRIPTION

As described above, conventional server technologies have had some drawbacks with respect to providing limited access to network socket information utilizing existing system calls, and such access can cause central processing unit (CPU) overhead. On the other hand, various embodiments disclosed herein can improve the performance of a server application by generating a new socket type of an enhanced address domain—the new socket type referencing a lower-layer socket of an existing address domain to perform enhanced operations over the existing address domain. In one example, the enhanced operations can comprise allocating a control, or double-mapped, page, which is concurrently mapped in both user space and kernel space, from a user-portion of memory that can store state and other information concerning the enhanced and lower-layer sockets. In this regard, such information can be obtained from a user-mode using a memory read operation—without incurring excessive CPU overhead associated with system calls.

For example, a system, e.g., a file server, network file system (NFS) server, etc. can comprise a processor; and a memory that stores executable instructions that, when executed by the processor, facilitate performance of operations, comprising: generating, creating, etc. an upper-layer socket of an enhanced address domain; allocating a protocol control block (PCB) and associating the PCB with the upper-layer socket—the PCB storing information representing a private state of the upper-layer socket; generating, creating, etc. a lower-layer socket of an existing address domain, e.g., an AF_NET, or address family, supporting Internet protocol version 4 (IPv4), an AF_INET6, or address family, supporting Internet protocol version 6 (IPv6), etc.—the lower-layer socket being accessible, referenced, etc. from the upper-layer socket using the PCB; and installing upcall(s) on the lower-layer socket to be intercepted via the enhanced address domain.

In an embodiment, the creating of the upper-layer socket can comprise creating the upper-layer socket utilizing a socket system call or a kernel socket application programming interface (API). In another embodiment, the creating of the lower-layer socket can comprise creating the lower-layer socket utilizing a socket system call or a kernel socket API

In yet another embodiment, the upper-layer socket is programmable, e.g., to support one or more enhancements to the existing address domain and a socket type of the lower-layer-socket, utilizing a socket system call or a kernel socket API.

In one embodiment, such enhancements can comprise maintaining a control page, or double-mapped page of memory, that comprises a collection of state information and other information corresponding to the upper-layer socket and the lower-layer socket. In this regard, the operations can comprise allocating the control page from a user-mode portion of memory, and associating the control page with the upper-layer socket—the control page being made accessible from a user-space comprising the user-mode memory, and being made accessible from a kernel space comprising a protected area of the memory—the kernel space corresponding to an operating system of the file server.

In an embodiment, the operations can further comprise modifying, from the enhanced address domain, the control page with information representing respective states and other related information of the upper-layer socket and the lower-layer socket. For example, the modifying can comprise storing, from the enhanced address domain, such states and information in the control page for later access from a user-mode. In this regard, the operations can further comprise obtaining, e.g., using a memory read operation from the user-mode, the respective states or the other related information from the control page—without using costly system calls. Further, details about network connections previously hidden from user-mode applications can be made available, revealed, etc. to such applications utilizing the control page.

In another embodiment, the operations can further comprise storing, from the user-mode, application, etc. such information as needed by the kernel to implement enhanced socket features.

In yet another embodiment, the modifying can comprise modifying the control page with the information as a consequence of any activity being determined to occur on the upper-layer socket, e.g., a system call, and/or modifying the control page with the information as a consequence of an upcall of the lower-layer socket.

In one embodiment, a method can comprise generating, by a system comprising a processor, e.g., a file server, a first socket of an enhanced address domain; generating, by the system, a PCB from a memory; associating, by the system, the first socket with the PCB for storage of information in the PCB representing a private state of the upper-layer socket; generating, by the system, a second socket of an existing address domain, wherein the second socket is referenced from the first socket using the PCB; and installing, by the system, upcall(s) on the second socket to be intercepted via the enhanced address domain.

In another embodiment, the generating the first socket can comprise generating the first socket utilizing a socket system call or a kernel socket application programming interface. In yet another embodiment, the generating the second socket can comprise generating the second socket utilizing a kernel socket application programming interface.

In an embodiment, the operations can further comprise controlling, by the system, features of the first socket utilizing at least one of a socket system call or a kernel socket application programming interface.

In one embodiment, the operations can further comprise creating, by the system using the first socket, at least one enhancement over the existing address domain. In this regard, in another embodiment, the creating of the at least one enhancement comprises assigning a control page from a user-mode portion of the memory—the control page being made accessible from a user space comprising the user-mode portion of the memory, and from a kernel space comprising a protected portion of the memory; and associating the first socket with the control page.

One embodiment can comprise a computer-readable storage medium comprising instructions that, in response to execution, cause a computing system comprising a processor to perform operations, comprising: generating an upper-layer socket of an enhanced address domain; allocating a PCB from memory; managing information representing a private state of the upper-layer socket in the PCB; associating the PCB with the upper-layer socket; creating a lower-layer socket of an existing address domain—the lower-layer socket being referenced from the upper-layer socket using the PCB; and installing upcall(s) on the lower-layer socket to be intercepted via the enhanced address domain.

In another embodiment, the operations can further comprise allocating a control page from a user-mode portion of the memory, and associating the control page with the upper-layer socket—the control page made accessible from a user space comprising the user-mode memory, and made accessible from a kernel space comprising a protected area of the memory.

In yet another embodiment, the operations can further comprise modifying, from the enhanced address domain, the control page with information representing respective states and other related information of the upper-layer socket and the lower-layer socket.

I. Socket Background

A network socket can be implemented in a kernel address space of an operating system using a socket structure, e.g., socket, struct socket, etc. to support a generic, high-level programming interface for transmitting and receiving data. In this regard, the socket structure is a general abstraction of a connection endpoint, and can manage nearly all of the details that a network application uses to transmit and receive data, e.g., between processes, between devices, etc.

A kernel application, e.g., an NFS server, built into the kernel address space can directly interact with the socket, socket structure, etc. through an address of the socket. On the other hand, since the socket is in the kernel address space, user applications, user-mode applications, e.g., executing within a user space of the operating system, do not have direct access to the socket. In this regard, a user application can use a system call to access a limited amount of information associated with the socket. For example, the user application can refer to the socket via a set of system routines, e.g., socket( ), close( ), bind( ), etc. using an association called a file descriptor, or “fd”, which is a unique integer and index within an application's process-specific file descriptor table. The file descriptor table comprises an array of various structures and is included in the kernel address space. An entry in the file descriptor table corresponding to the fd comprises the address of the socket structure.

Consequently, unlike kernel mode applications, which can directly interact with a socket, user-mode applications consume central processing unit (CPU) overhead and have limited access to socket state information utilizing socket system calls.

Each socket has two buffer control substructures, e.g., struct sockbuf, used to manage an ordered list of memory buffers, e.g., struct mbuf. One of the buffer control substructures is used for received data, e.g., receive sockbuf, and the other is used for pending send data, e.g., send sockbuf. Further, each buffer control structure comprises counts, limits, flags, an mbuf listhead element used to manage a variable-length chain of memory buffers (or mbufs), and a small area, e.g., approximately 200-240 bytes, for internal data. In this regard, when more data is needed, the mbufs can be chained together in sequence to form a stream of bytes, or describe an “external buffer” as a separate allocation of memory to store the data.

Further, the kernel socket implementation supports an upcall notification mechanism for the receive sockbuf and send sockbuf portions of the socket. For example, a receive upcall is invoked when data is added to the receive sockbuf, a new connection is ready for acceptance on a listening socket, a peer closes the send side of their socket, and/or an error occurs on the socket. A send upcall is invoked when data leaves the send sockbuf as the result of successful transmission, e.g., indicating data departure and an availability of send sockbuf space; when a notification of connection completion that has been initiated by a call to kernel socket routine soconnect( ) has occurred, and/or an error occurs on the socket.

II. Enhanced Socket Interface

Now referring toFIGS. 1 and 2, block diagrams (100,200) of respective file servers associated with an enhanced address domain are illustrated, in accordance with various embodiments. File server110can include user-mode component120and kernel mode component130. User-mode component120can be configured to execute user-mode applications via user space210, e.g., a non-protected, non-fault tolerant, etc. portion of a memory. In this regard, the user-mode applications can interface with kernel component130of kernel space220, e.g., a protected, fault tolerant, etc. portion of the memory, via system calls corresponding to an address family, and the file descriptor, via descriptor table230.

The address family is a specific address namespace, or domain, used by kernel component130to manage connections via sockets. Domains, or address families, support one or more protocols that use the same address format and are mutually exclusive. The address family can be specified in two specific ways: when a socket is created, in which a calling process identifies the address family that the socket will be used in, or by a generic socket address structure, e.g., struct sockaddr, which has an address family field, sa_family, which is used to determine how to interpret the rest of the structure. For example, the INET address family, AF_INET, supports IPv4 with 32-bit addresses; and the structure used with AF_INET is struct sockaddr_in. The INET6 address family, AF_INET6, supports IPv6 with 128-bit addresses; and the structure used with AF_INET6 is the struct sockaddr_in6.

In an embodiment, kernel component130can comprise a FreeBSD operating system loadable kernel module (LKM) (not shown). At load time, the FreeBSD LKM can register two Internet protocol address families, or enhanced address domains: AF_INET_ENHANCED and AF_INET6_ENHANCED, e.g., defined in a header, or .h file. In one embodiment, the FreeBSD LKM can be unloaded from kernel space220for serviceability—at which time it unregisters such Internet protocol address familys/socket domains. In this regard, each enhanced address domain has a reference count that reflects the number of sockets, enhanced sockets, etc. that are connected with such domain. Therefore, the FreeBSD LKM cannot be unloaded from kernel space220if there are any enhanced sockets, e.g., using the enhanced address domains—an attempt to unload the FreeBSD LKM when any of the enhanced sockets are in use will return a function error, e.g., EBUSY.

As described below, sockets generated, created, etc. with AF_INET_ENHANCED and AF_INET6_ENHANCED domains support a custom set of socket options that enable, disable, or establish settings for an enhanced socket interface, e.g., above and beyond existing AF_INET and AF_INET6 socket options. By default, an enhanced socket that is generated, created, etc. via a user mode application using the AF_INET_ENHANCED/AF_INET6_ENHANCED domain, without implementing enhanced functions (see below), will behave as an AF_INET/AF_INET6 socket. In one embodiment, an initial socket( ) system call made within a user mode application can specify an AF_INET_ENHANCED or AF_INET6_ENHANCED domain, and a corresponding socket type is selected via a socket_type parameter of the socket( ) system call.

As illustrated byFIG. 2, upon receiving the intial socket( ) system call from the user mode application, e.g., via an API corresponding to the FreeBSD LKM, kernel component130can create upper socket240and lower socket260. Upper socket240can comprise an enhanced socket, created using, e.g., the AF_INET_ENHANCED/AF_INET6_ENHANCED domain, and is connected to, referenced by, etc. file descriptor table230. In this regard, once the user mode application implements the initial socket( ) system call, the user mode application interacts with the enhanced socket—via AF_INET/AF_INET6 based socket addresses and semantics of respective system calls corresponding to the FreeBSD LKM—using a file descriptor that references an entry in file descriptor table230, the entry comprising the address of upper socket240.

In embodiment(s), when upper socket240is created as an AF_INET_ENHANCED/AF_INET6_ENHANCED socket, kernel component130creates, via execution of a protocol attach routine corresponding to upper socket240, lower socket260as a standard AF_INET/AF_INET6 socket, and creates PCB270corresponding to lower socket260—PCB270comprising private data corresponding to lower socket260. Further, kernel component130creates, based on the attach routine, PCB250corresponding to upper socket240, and stores an address, e.g., lower socket address330of lower socket260in PCB250. In this regard, upper socket240interacts with lower socket260utilizing the address.

PCB250comprises private data, e.g., comprising at least the address of lower socket260and additional state and information340representing a private state of upper socket240. In this regard, protocol/domain support routines that are called, executed, etc. via the user mode application utilize the private data during execution. However, lower socket260is not accessible via a file descriptor, and the so_flags parameter of lower socket260is set to SS_NOFDREF. Therefore, the user mode application does not have direct access to lower socket260, and lower socket260is managed by kernel component130as a conventional protocol socket.

In an embodiment, when the user application closes the enhanced socket, kernel component130undoes, via execution of a protocol detach routine corresponding to upper socket240, the established relationships between upper socket240, PCB250, and lower socket260.

As described above, a socket( ) system call can specify a type of socket to be created. In this regard, in embodiment(s), the enhanced address domain comprises at least a datagram protocol socket type and a connection-oriented protocol socket type, e.g., such protocol socket types corresponding to communication between computers over a network, e.g., Internet. The datagram protocol socket type is defined as SOCK_DGRAM, e.g., for supporting an unreliable, unorderd delivery of datagram, e.g., message, data corresponding to UDP, e.g., defined as IPPROTO_UDP. Further, the connection-oriented protocol socket type is defined as SOCK_STREAM, e.g., for supporting a reliable, sequenced stream of guaranteed delivery data corresponding to TCP, e.g., defined as IPPROTO_TCP.

III. Control Page

Referring now toFIG. 3, a block diagram (300) of a file server including a control page (310) associated with an enhanced address domain is illustrated, in accordance with various embodiments. Control page (CPAGE)310is a page of memory that can be allocated via the user mode application using an mmap( ) system call. In this regard, CPAGE310is a read/write page that can be double-mapped to user space210and kernel space220using a system call, e.g., setsocktopt( ) (see below).

Once CPAGE310is established, PCB250can store control page address320for referencing CPAGE310, and kernel component130can update, using control page address320, CPAGE310with socket information, data changes, change of state, etc. corresponding to upper socket240, lower socket260, etc. as such changes occur. In this regard, since CPAGE310has also been mapped to user space210, the socket information corresponding to upper socket240and/or lower socket260can be made available to the user mode application, e.g., via memory read and/or write operation(s), without using a system call. In other embodiments, the socket information can further include control data with respect to details that kernel component130manages, e.g., which is not otherwise available to the user application via an existing API.

In an embodiment, a sequence number can be included in CPAGE310, and incremented after each modification to data of CPAGE310has been completed, e.g., providing a lockless method for the user mode application to extract information corresponding to upper socket240and lower socket260, e.g., without fear of fetching data in the middle of an update of CPAGE310.

IV. Socket Programming

This section is an example implementation of an enhanced socket. As described above, enhanced sockets for the internet protocol are created using the AF_INET_ENHANCED/AF_INET6_ENHANCED address families. Further, once an enhanced socket is created, socket operation behaves as normal AF_NET and AF_INET6 sockets unless the user mode application enables certain options, features, accelerations, etc. In this regard, such options, etc. are enabled through the use of setsockopt( ) and getsockopt( ) system calls corresponding to the FreeBSD LKM.

In one embodiment, an enhanced socket is closed, removed, destroyed, etc. using a close( ) system call. Further, the user mode application does not have to undo any enhanced socket settings prior to closing the enhanced socket, since any association with resources or other sockets are undone as a result of the close( ) system call. In this regard, in embodiment(s), the closure of an enhanced socket results in: disassociation of upper socket240from lower socket260, release of resource(s) owned by lower socket260, and control page310being unmapped from kernel component130, but remaining in the memory address space.

In embodiment(s), Table I below represents a code excerpt defining a possible implementation of an enhanced socket control data structure that can be exposed to the user mode application via a setsockopt( ) system call, e.g., to set or clear a setting, and/or via a getsockopt( ) system call, e.g., to read the setting.

TABLE I/** ESOCKS protocol socket control structure exposed to* the application through SO_ESOCK_CONTROL_DATA.*/typedefstruct _esocks_protocol_control {esocks_mapping_status_tec_mapped_state;esocks_sequence_tec_sequence_number;esocks_sockaddr_tec_sockaddr;esocks_sockaddr_tec_peeraddr;uint8_tec_diogenes[256];} esocks_protocol_control_t;

Where:ec_mapped_status represents the current state of the control data. When successfully mapped, it is set to ESOCKS_IS_MAPPED. When successfully unmapped, it is set to ESOCKS_IS_UNMAPPED.ec_sequence_number is a value that is incremented each time there is an update to the control data. It is initially set to zero when the data is first mapped and increments to 1 when the area is initialized. This field is especially useful for determining, at a higher level, if any state of the socket has changed.ec_sockaddr is the local socket address. If sa_len is zero, then there is no local address on the socket.ec_peeraddr is the remote socket address. For a connected socket, this is the address of the remote socket. If sa_len is zero, then the socket is either UDP or an unconnected TCP.ec_diogenes[ ] is a buffer containing a copy of a limited amount of the current leading bytes on the receive sockbuf.

In one embodiment, the control data can comprise socket state bits that reflect the status of lower socket260, e.g., for TCP operations, as described in Table II code excerpt below:

Where:ESOCKS_SS_ISCONNECTED indicates a completed connection.ESOCKS_SS_ISCONNECTING indicates that the connection is in the process of being established.ESOCKS_SS_ISDISCONNECTING indicates that the connection is in the process of being torn down.ESOCKS_SS_ISCONFIRMING provides address domain(s) with an intermediate step in which such address domain(s) can determine whether to accept or reject a connection.ESOCKS_SS_ISDISCONNECTED indicates that a previously connected socket is now disconnected.

In another embodiment, the control data can include socket state bits corresponding to a receive sockbuf and/or send sockbuf of lower socket260, as described in Table III code excerpt below:

Where:ESOCKS_SBS_CANTSENDMORE indicates that the send side of the connection is closed down and that no new data can be written. This can only occur if the shutdown( ) system call is used.ESOCK_SBS_CANTRCVMORE indicates that the receive side of the connection is closed down and that no new data can be received. This can occur if the shutdown( ) system call is used or if the peer has initiated the close of the connection.ESOCKS_SBS_RCVATMARK indicates that the stream is currently at the position of an out-of-band character.

In yet another embodiment, a mapping status of a mapped page, e.g., CPAGE310, can be defined as described in Table IV code excerpt below:

Where:ESOCKS_IS_UNMAPPED indicates that the underlying mappable page is currently not mapped.ESOCKS_IS_MAPPED indicates that the underlying mappable page is currently mapped.

In one embodiment, socket options can be enabled or disabled based on the definitions described in Table V code excerpt below:

Where:ESOCKS_OPTION_OFF is used to turn or indicate that a Boolean option is disabled.ESOCKS_OPTION_ON is used to turn or indicate that a Boolean option is enabled.

In another embodiment, enhanced sockets can be defined, and socket address data can be accessed, via a special union described in Table IV code excerpt below:

Where:esocks_sockaddr_t is the type that describes the possible socket address formats:sa is the default, generic socket address type.sin is the socket address format for AF_INET sockets.sin6 is the socket address format for AF_INET6 sockets.

In another embodiment, Table VII below represents an example code excerpt for creating an enhanced socket and a double-mapped control page, e.g., CPAGE310, and associating the double-mapped control page with the enhanced socket to enable access of information, state information, data, etc. associated with the enhanced socket, e.g., associated with lower socket260, upper socket240, etc. For example, in embodiment(s), the user space application can execute memory reference(s), e.g., read operation(s), directed to the double-mapped control page.

In an embodiment, in the event the AF_INET_ENHANCED/AF_INET6_ENHANCED address families, enhanced address domains, etc. are not loaded into kernel space220, e.g., via the FreeBSD LKM, an attempt to create a socket from the user mode application using the enhanced socket address, domain, etc. identifiers will fail with an error defined as EPROTONOSUPPORT.

In another embodiment, the mmap( ) system call will produce a page of zeroes. When successfully mapped to the socket, the ec_map_state field of the control data will change from ESOCKS_IS_UNMAPPED to ESOCKS_IS_MAPPED.

FIG. 4illustrates process400performed by file server110, e.g., associated with an enhanced address domain, in accordance with various embodiments. At410, a first socket, e.g., upper level socket, of the enhanced address domain can be generated. At420, a PCB can be generated from a memory, e.g., file server110. At430, the first socket can be associated with the PCB for storage of information in the PCB representing a private state of the first socket. A440, a second socket, e.g., lower level socket, of an existing address domain can be generated—the second socket being referenced from the first socket using the PCB. At450, upcall(s) can be installed on the second socket, e.g., lower level socket, to be intercepted via the enhanced address domain. In this regard, in embodiment(s), the enhanced address domain can read data from the second socket in response detecting the upcall(s), detecting a state change based on the upcall(s), etc.

FIG. 5illustrates a flowchart (500) of another method performed by file server110, e.g., associated with an enhanced address domain, in accordance with various embodiments. At510, a system call from a user mode application can request creation of an enhanced socket in a kernel space. At520, it can be determined whether an enhanced address domain has been loaded into the kernel space, e.g., via a header, or *.h file defining Internet protocol address families, e.g., enhanced address domains AF_INET_ENHANCED and/or AF_INET6_ENHANCED.

In this regard, if it has been determined, at520, that the enhanced address domain has not been loaded into the kernel space, then file server110fails the request and produces an error, error message, etc. at530; otherwise, flow continues to540, at which the enhanced socket can be created in the kernel space.

FIG. 6illustrates a flow chart (600) of yet another method performed by file server110, e.g., associated with an enhanced address domain, in accordance with various embodiments. At610, a socket system call, e.g., bind( ), listen( ), connect( ), accept( ), etc. accepts a file descriptor as an input parameter. At620, it can be determined whether an enhanced option is enabled that affects the socket system call.

In this regard, if it has been determined that the enhanced option is enabled, flow continues to630, at which the enhanced socket behaves as an AF_INET_ENHANCED socket or an AF_INET6_ENHANCED socket; otherwise, flow continues to640, at which the enhanced socket behaves as an AF_NET socket or an AF_INET6 socket.

FIG. 7illustrates a flowchart (700) of a method performed by file server110associated with closure of an enhanced protocol socket, in accordance with various embodiments. At710, a close( ) system call requests a socket closure. At720, a corresponding lower socket can be disassociated from an upper socket. At730, double-mapped pages can be unmapped. At740, resources owned by the enhanced socket, e.g., a PCB corresponding to the enhanced socket, can be deallocated or freed. At750, the lower socket can be closed.

FIG. 8illustrates a flowchart (800) of a method performed by file server110associated with creation of a control page, in accordance with various embodiments. At810, a page can be allocated from a user-mode portion of a memory. At820, a setsockopt( ) system call requests the allocated page be established as the control page. At830, an enhanced socket driver double maps the control page. At840, at least one control page field is initialized, e.g., ec_mapped_state is set to ESOCKS_IS_MAPPED.

FIG. 9illustrates a flowchart (900) of a method performed by file server110associated with updating a control page, in accordance with various embodiments. At910, a system call can be performed against an upper socket, upper level socket, etc. At920, an enhanced address domain can invoke any number of existing kernel APIs against the lower socket to support the system call on the upper socket. At930, the upper socket can be updated with a state of the lower socket. At940, it can be determined whether the control page has been mapped. In this regard, if the control page has been mapped, flow continues to950, at which the control page can be updated with information corresponding to changes of the upper and/or lower socket; otherwise, flow continues to960.

FIG. 10illustrates a flow chart of another method associated with updating a control page, in accordance with various embodiments. At1010, an upcall can be made from the lower socket to the enhanced address domain. At1020, the upper socket can be updated with a state of the lower socket. At1030, it can be determined whether the control page has been mapped. In this regard, if the control page has been mapped, flow continues to1040, at which the control page can be updated with information corresponding to changes of the upper and/or lower socket; otherwise, flow continues to1050.

Furthermore, to the extent that the terms “includes,” “has,” “contains,” and other similar words are used in either the detailed description or the appended claims, such terms are intended to be inclusive—in a manner similar to the term “comprising” as an open transition word—without precluding any additional or other elements. Moreover, the term “or” is intended to mean an inclusive “or” rather than an exclusive “or”. That is, unless specified otherwise, or clear from context, “X employs A or B” is intended to mean any of the natural inclusive permutations. That is, if X employs A; X employs B; or X employs both A and B, then “X employs A or B” is satisfied under any of the foregoing instances. In addition, the articles “a” and “an” as used in this application and the appended claims should generally be construed to mean “one or more” unless specified otherwise or clear from context to be directed to a singular form.

As utilized herein, the terms “logic,” “logical,” “logically,” and the like are intended to refer to any information having the form of instruction signals and/or data that may be applied to direct the operation of a processor. Logic may be formed from signals stored in a device memory. Software is one example of such logic. Logic may also be comprised by digital and/or analog hardware circuits, for example, hardware circuits comprising logical AND, OR, XOR, NAND, NOR, and other logical operations. Logic may be formed from combinations of software and hardware. On a network, logic may be programmed on a server, or a complex of servers. A particular logic unit is not limited to a single logical location on the network.

Further, components can execute from various computer readable media having various data structures stored thereon. The components can communicate via local and/or remote processes such as in accordance with a signal having one or more data packets (e.g., data from one component interacting with another component in a local system, distributed system, and/or across a network, e.g., the Internet, with other systems via the signal).

As another example, a component can be an apparatus with specific functionality provided by mechanical parts operated by electric or electronic circuitry; the electric or electronic circuitry can be operated by a software application or a firmware application executed by one or more processors; the one or more processors can be internal or external to the apparatus and can execute at least a part of the software or firmware application. In yet another example, a component can be an apparatus that provides specific functionality through electronic components without mechanical parts; the electronic components can comprise one or more processors therein to execute software and/or firmware that confer(s), at least in part, the functionality of the electronic components.

Aspects of systems, apparatus, and processes explained herein can constitute machine-executable instructions embodied within a machine, e.g., embodied in a computer readable medium (or media) associated with the machine. Such instructions, when executed by the machine, can cause the machine to perform the operations described. Additionally, the systems, processes, process blocks, etc. can be embodied within hardware, such as an application specific integrated circuit (ASIC) or the like. Moreover, the order in which some or all of the process blocks appear in each process should not be deemed limiting. Rather, it should be understood by a person of ordinary skill in the art having the benefit of the instant disclosure that some of the process blocks can be executed in a variety of orders not illustrated.

Furthermore, the word “exemplary” and/or “demonstrative” is used herein to mean serving as an example, instance, or illustration. For the avoidance of doubt, the subject matter disclosed herein is not limited by such examples. In addition, any aspect or design described herein as “exemplary” and/or “demonstrative” is not necessarily to be construed as preferred or advantageous over other aspects or designs, nor is it meant to preclude equivalent exemplary structures and techniques known to those of ordinary skill in the art having the benefit of the instant disclosure.

The disclosed subject matter can be implemented as a method, apparatus, or article of manufacture using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof to control a computer to implement the disclosed subject matter. The term “article of manufacture” as used herein is intended to encompass a computer program accessible from any computer-readable device, computer-readable carrier, or computer-readable media. For example, computer-readable media can comprise, but are not limited to, magnetic storage devices, e.g., hard disk; floppy disk; magnetic strip(s); optical disk (e.g., compact disk (CD), digital video disc (DVD), Blu-ray Disc (BD)); smart card(s); and flash memory device(s) (e.g., card, stick, key drive); and/or a virtual device that emulates a storage device and/or any of the above computer-readable media.

In accordance with various embodiments, processor(s) for implementing embodiments disclosed herein can comprise distributed processing devices, or parallel processing devices, in a single machine, device, etc., or across multiple machines, devices, etc. Furthermore, the processor(s) can comprise a state machine, an application specific integrated circuit (ASIC), or a programmable gate array (PGA), e.g., field PGA (FPGA). In this regard, when the processor(s) execute instruction(s) to perform “operations”, the processor(s) can perform the operations directly, and/or facilitate, direct, or cooperate with other device(s) and/or component(s) to perform the operations.

In the subject specification, terms such as “store,” “data store,” “data storage,” “database,” “storage medium”, and substantially any other information storage component relevant to operation and functionality of a component and/or process, refer to “memory components,” or entities embodied in a “memory,” or components comprising the memory. It will be appreciated that the memory components described herein can be either volatile memory or nonvolatile memory, or can comprise both volatile and nonvolatile memory.

With reference toFIG. 11, a block diagram of a computing system1100, e.g., file system110, operable to execute the disclosed systems and methods is illustrated, in accordance with an embodiment. Computer1112comprises a processing unit1114, a system memory1116, and a system bus1118. System bus1118couples system components comprising, but not limited to, system memory1116to processing unit1114. Processing unit1114can be any of various available processors. Dual microprocessors and other multiprocessor architectures also can be employed as processing unit1114.

System bus1118can be any of several types of bus structure(s) comprising a memory bus or a memory controller, a peripheral bus or an external bus, and/or a local bus using any variety of available bus architectures comprising, but not limited to, industrial standard architecture (ISA), micro-channel architecture (MSA), extended ISA (EISA), intelligent drive electronics (IDE), VESA local bus (VLB), peripheral component interconnect (PCI), card bus, universal serial bus (USB), advanced graphics port (AGP), personal computer memory card international association bus (PCMCIA), Firewire (IEEE 1394), small computer systems interface (SCSI), and/or controller area network (CAN) bus used in vehicles.

System memory1116comprises volatile memory1120and nonvolatile memory1122. A basic input/output system (BIOS), containing routines to transfer information between elements within computer1112, such as during start-up, can be stored in nonvolatile memory1122. By way of illustration, and not limitation, nonvolatile memory1122can comprise ROM, PROM, EPROM, EEPROM, or flash memory. Volatile memory1120comprises RAM, which acts as external cache memory. By way of illustration and not limitation, RAM is available in many forms such as SRAM, dynamic RAM (DRAM), synchronous DRAM (SDRAM), double data rate SDRAM (DDR SDRAM), enhanced SDRAM (ESDRAM), Synchlink DRAM (SLDRAM), Rambus direct RAM (RDRAM), direct Rambus dynamic RAM (DRDRAM), and Rambus dynamic RAM (RDRAM).

Computer1112also comprises removable/non-removable, volatile/non-volatile computer storage media.FIG. 11illustrates, for example, disk storage1124. Disk storage1124comprises, but is not limited to, devices like a magnetic disk drive, floppy disk drive, tape drive, Jaz drive, Zip drive, LS-100 drive, flash memory card, or memory stick. In addition, disk storage1124can comprise storage media separately or in combination with other storage media comprising, but not limited to, an optical disk drive such as a compact disk ROM device (CD-ROM), CD recordable drive (CD-R Drive), CD rewritable drive (CD-RW Drive) or a digital versatile disk ROM drive (DVD-ROM). To facilitate connection of the disk storage devices1124to system bus1118, a removable or non-removable interface is typically used, such as interface1126.

It is to be appreciated thatFIG. 11describes software that acts as an intermediary between users and computer resources described in suitable operating environment1100. Such software comprises an operating system1128. Operating system1128, which can be stored on disk storage1124, acts to control and allocate resources of computer system1112. System applications1130take advantage of the management of resources by operating system1128through program modules1132and program data1134stored either in system memory1116or on disk storage1124. It is to be appreciated that the disclosed subject matter can be implemented with various operating systems or combinations of operating systems.

A user can enter commands or information into computer1112through input device(s)1136. Input devices1136comprise, but are not limited to, a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, joystick, game pad, satellite dish, scanner, TV tuner card, digital camera, digital video camera, web camera, cellular phone, user equipment, smartphone, and the like. These and other input devices connect to processing unit1114through system bus1118via interface port(s)1138. Interface port(s)1138comprise, for example, a serial port, a parallel port, a game port, a universal serial bus (USB), a wireless based port, e.g., Wi-Fi, Bluetooth, etc. Output device(s)1140use some of the same type of ports as input device(s)1136.

Thus, for example, a USB port can be used to provide input to computer1112and to output information from computer1112to an output device1140. Output adapter1142is provided to illustrate that there are some output devices1140, like display devices, light projection devices, monitors, speakers, and printers, among other output devices1140, which use special adapters. Output adapters1142comprise, by way of illustration and not limitation, video and sound devices, cards, etc. that provide means of connection between output device1140and system bus1118. It should be noted that other devices and/or systems of devices provide both input and output capabilities such as remote computer(s)1144.

Computer1112can operate in a networked environment using logical connections to one or more remote computers, such as remote computer(s)1144. Remote computer(s)1144can be a personal computer, a server, a router, a network PC, a workstation, a microprocessor based appliance, a peer device, or other common network node and the like, and typically comprises many or all of the elements described relative to computer1112.

For purposes of brevity, only a memory storage device1146is illustrated with remote computer(s)1144. Remote computer(s)1144is logically connected to computer1112through a network interface1148and then physically and/or wirelessly connected via communication connection1150. Network interface1148encompasses wire and/or wireless communication networks such as local-area networks (LAN) and wide-area networks (WAN). LAN technologies comprise fiber distributed data interface (FDDI), copper distributed data interface (CDDI), Ethernet, token ring and the like. WAN technologies comprise, but are not limited to, point-to-point links, circuit switching networks like integrated services digital networks (ISDN) and variations thereon, packet switching networks, and digital subscriber lines (DSL).

Communication connection(s)1150refer(s) to hardware/software employed to connect network interface1148to bus1118. While communication connection1150is shown for illustrative clarity inside computer1112, it can also be external to computer1112. The hardware/software for connection to network interface1148can comprise, for example, internal and external technologies such as modems, comprising regular telephone grade modems, cable modems and DSL modems, wireless modems, ISDN adapters, and Ethernet cards.

The computer1112can operate in a networked environment using logical connections via wired and/or wireless communications to one or more remote computers, cellular based devices, user equipment, smartphones, or other computing devices, such as workstations, server computers, routers, personal computers, portable computers, microprocessor-based entertainment appliances, peer devices or other common network nodes, etc. The computer1112can connect to other devices/networks by way of antenna, port, network interface adaptor, wireless access point, modem, and/or the like.

The computer1112is operable to communicate with any wireless devices or entities operatively disposed in wireless communication, e.g., a printer, scanner, desktop and/or portable computer, portable data assistant, communications satellite, user equipment, cellular base device, smartphone, any piece of equipment or location associated with a wirelessly detectable tag (e.g., scanner, a kiosk, news stand, restroom), and telephone. This comprises at least Wi-Fi and Bluetooth wireless technologies. Thus, the communication can be a predefined structure as with a conventional network or simply an ad hoc communication between at least two devices.

Wi-Fi allows connection to the Internet from a desired location (e.g., a vehicle, couch at home, a bed in a hotel room, or a conference room at work, etc.) without wires. Wi-Fi is a wireless technology similar to that used in a cell phone that enables such devices, e.g., mobile phones, computers, etc., to send and receive data indoors and out, anywhere within the range of a base station. Wi-Fi networks use radio technologies called IEEE 802.11 (a, b, g, etc.) to provide secure, reliable, fast wireless connectivity. A Wi-Fi network can be used to connect communication devices (e.g., mobile phones, computers, etc.) to each other, to the Internet, and to wired networks (which use IEEE 802.3 or Ethernet). Wi-Fi networks operate in the unlicensed 2.4 and 5 GHz radio bands, at an 11 Mbps (802.11a) or 54 Mbps (802.11b) data rate, for example, or with products that contain both bands (dual band), so the networks can provide real-world performance similar to the basic 10BaseT wired Ethernet networks used in many offices.