In this section, we describe the ioctls used to manage the Solstice X.25 routing function in the sockets-based interface. The Solstice X.25 routing function is described in detail in Solstice X.25 9.2 Administration Guide. The data structure used for routing is as follows:
typedef struct x25_route_s { uint32_t index; u_char r_type; #define R_NONE 0 #define R_X121_HOST 1 #define R_X121_PREFIX 2 #define R_AEF_HOST 3 #define R_AEF_PREFIX 4 CONN_ADR x121; u_char pid_len; #define MAX_PID_LEN 4 u_char pid[MAX_PID_LEN]; AEF aef; int linkid; X25_MACADDR mac; int use_count; char reserved[16]; } X25_ROUTE;
The following declarations will be used in the code segments used for illustration:
int s, error; X25_ROUTE r;
To add a route, set the fields in the X25_ROUTE structure to desired values, and execute the X25_ADD_ROUTE ioctl as follows:
error = ioctl(s, X25_ADD_ROUTE, &r);
To obtain the routing information for a given destination address, set the destination address in the X25_ROUTE structure and execute the X25_GET_ROUTE ioctl:
error = ioctl(s, X25_GET_ROUTE, &r);
To remove a route for a given destination address, set the destination address in the X25_ROUTE structure and execute the X25_RM_ROUTE ioctl:
error = ioctl(s, N_X25_RM_ROUTE, &r);
To flush all routes out, execute the X25_FLUSH_ROUTES ioctl:
error = ioctl(s, X25_FLUSH_ROUTES);
The following code segment illustrates how one may cycle through all the routes configured in the system and obtain the parameters for each of them:
r.index = 0; do { error = ioctl(s, X25_GET_NEXT_ROUTE, &r); if (error == 0) /* print the route */; while (error == 0);
When there are no routes left, error will be -1, and errno will be set to ENOENT.
The X25_ADD_ROUTE, X25_RM_ROUTE, and X25_FLUSH_ROUTES ioctls require superuser privilege; X25_GET_ROUTE and X25_GET_NEXT_ROUTE do not.