struct timeval last_recovery_finished;
};
-/*
- struct for tcp_client control
- this is an ipv4 only version of this structure used by samba
- samba will later be migrated over to use the
- ctdb_control_tcp_addr structure instead
- */
-struct ctdb_control_tcp {
- struct sockaddr_in src; /* samba uses this */
- struct sockaddr_in dest; /* samba uses this */
-};
-/* new style structure */
struct ctdb_control_tcp_addr {
ctdb_sock_addr src;
ctdb_sock_addr dest;
CHECK_CONTROL_DATA_SIZE(0);
return ctdb_control_get_public_ips(ctdb, c, outdata);
- case CTDB_CONTROL_TCP_CLIENT:
+ case CTDB_CONTROL_TCP_CLIENT:
+ CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_control_tcp_addr));
return ctdb_control_tcp_client(ctdb, client_id, indata);
case CTDB_CONTROL_STARTUP:
/*
called by a client to inform us of a TCP connection that it is managing
that should tickled with an ACK when IP takeover is done
- we handle both the old ipv4 style of packets as well as the new ipv4/6
- pdus.
*/
int32_t ctdb_control_tcp_client(struct ctdb_context *ctdb, uint32_t client_id,
TDB_DATA indata)
{
struct ctdb_client *client = ctdb_reqid_find(ctdb, client_id, struct ctdb_client);
- struct ctdb_control_tcp *old_addr = NULL;
- struct ctdb_control_tcp_addr new_addr;
struct ctdb_control_tcp_addr *tcp_sock = NULL;
struct ctdb_tcp_list *tcp;
struct ctdb_tcp_connection t;
return 0;
}
- switch (indata.dsize) {
- case sizeof(struct ctdb_control_tcp):
- old_addr = (struct ctdb_control_tcp *)indata.dptr;
- ZERO_STRUCT(new_addr);
- tcp_sock = &new_addr;
- tcp_sock->src.ip = old_addr->src;
- tcp_sock->dest.ip = old_addr->dest;
- break;
- case sizeof(struct ctdb_control_tcp_addr):
- tcp_sock = (struct ctdb_control_tcp_addr *)indata.dptr;
- break;
- default:
- DEBUG(DEBUG_ERR,(__location__ " Invalid data structure passed "
- "to ctdb_control_tcp_client. size was %d but "
- "only allowed sizes are %lu and %lu\n",
- (int)indata.dsize,
- (long unsigned)sizeof(struct ctdb_control_tcp),
- (long unsigned)sizeof(struct ctdb_control_tcp_addr)));
- return -1;
- }
+ tcp_sock = (struct ctdb_control_tcp_addr *)indata.dptr;
addr = tcp_sock->src;
ctdb_canonicalize_ip(&addr, &tcp_sock->src);
void *private_data),
void *private_data)
{
- /*
- * we still use ctdb_control_tcp for ipv4
- * because we want to work against older ctdb
- * versions at runtime
- */
- struct ctdb_control_tcp p4;
struct ctdb_control_tcp_addr p;
TDB_DATA data;
NTSTATUS status;
switch (client.ss_family) {
case AF_INET:
- memcpy(&p4.dest, &server, sizeof(p4.dest));
- memcpy(&p4.src, &client, sizeof(p4.src));
- data.dptr = (uint8_t *)&p4;
- data.dsize = sizeof(p4);
+ memcpy(&p.dest.ip, &server, sizeof(p.dest.ip));
+ memcpy(&p.src.ip, &client, sizeof(p.src.ip));
+ data.dptr = (uint8_t *)&p;
+ data.dsize = sizeof(p);
break;
case AF_INET6:
memcpy(&p.dest.ip6, &server, sizeof(p.dest.ip6));