#include <linux/kref.h>
#include <net/genetlink.h>
#include <uapi/linux/cifs/cifs_netlink.h>
#include "cifs_swn.h"
#include "cifsglob.h"
#include "cifsproto.h"
#include "fscache.h"
#include "cifs_debug.h"
#include "netlink.h"
static DEFINE_IDR(cifs_swnreg_idr);
static DEFINE_MUTEX(cifs_swnreg_idr_mutex);
struct cifs_swn_reg { … };
static int cifs_swn_auth_info_krb(struct cifs_tcon *tcon, struct sk_buff *skb)
{ … }
static int cifs_swn_auth_info_ntlm(struct cifs_tcon *tcon, struct sk_buff *skb)
{ … }
static int cifs_swn_send_register_message(struct cifs_swn_reg *swnreg)
{ … }
static int cifs_swn_send_unregister_message(struct cifs_swn_reg *swnreg)
{ … }
static struct cifs_swn_reg *cifs_find_swn_reg(struct cifs_tcon *tcon)
{ … }
static struct cifs_swn_reg *cifs_get_swn_reg(struct cifs_tcon *tcon)
{ … }
static void cifs_swn_reg_release(struct kref *ref)
{ … }
static void cifs_put_swn_reg(struct cifs_swn_reg *swnreg)
{ … }
static int cifs_swn_resource_state_changed(struct cifs_swn_reg *swnreg, const char *name, int state)
{ … }
static bool cifs_sockaddr_equal(struct sockaddr_storage *addr1, struct sockaddr_storage *addr2)
{ … }
static int cifs_swn_store_swn_addr(const struct sockaddr_storage *new,
const struct sockaddr_storage *old,
struct sockaddr_storage *dst)
{ … }
static int cifs_swn_reconnect(struct cifs_tcon *tcon, struct sockaddr_storage *addr)
{ … }
static int cifs_swn_client_move(struct cifs_swn_reg *swnreg, struct sockaddr_storage *addr)
{ … }
int cifs_swn_notify(struct sk_buff *skb, struct genl_info *info)
{ … }
int cifs_swn_register(struct cifs_tcon *tcon)
{ … }
int cifs_swn_unregister(struct cifs_tcon *tcon)
{ … }
void cifs_swn_dump(struct seq_file *m)
{ … }
void cifs_swn_check(void)
{ … }