/*
* Copyright (c) International Business Machines Corp., 2008
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
* the GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* Author: Veerendra C <vechandr@in.ibm.com>
*
* Net namespaces were introduced around 2.6.25.  Kernels before that,
* assume they are not enabled.  Kernels after that, check for -EINVAL
* when trying to use CLONE_NEWNET and CLONE_NEWNS.
***************************************************************************/
#include <stdio.h>
#include <sched.h>
#include "config.h"
#include "libclone.h"
#include "linux_syscall_numbers.h"
#include "test.h"

char *TCID = "check_netns_enabled";
int TST_COUNT = 1;
int TST_TOTAL = 1;

#ifndef CLONE_NEWNET
#define CLONE_NEWNET -1
#endif

#ifndef CLONE_NEWNS
#define CLONE_NEWNS -1
#endif

int main(void)
{
	/* Checking if the kernel supports unshare with netns capabilities. */
	if (CLONE_NEWNET == -1 || CLONE_NEWNS == -1)
		tst_resm(TBROK | TERRNO,
			 "CLONE_NEWNET (%d) or CLONE_NEWNS (%d) not supported",
			 CLONE_NEWNET, CLONE_NEWNS);
	else if (ltp_syscall(__NR_unshare, CLONE_NEWNET | CLONE_NEWNS) == -1)
		tst_resm(TFAIL | TERRNO, "unshare syscall smoke test failed");
	else
		tst_resm(TPASS, "unshare syscall smoke test passed");
	tst_exit();
}
