but i was struck at the 5th point while coding which says about kSCNetworkProtocolTypePPP and there is no such thing...
There is no need to fetch the PPP protocol, you can apply the settings directly to the interface you created. If you created the interface like this:
interface = SCNetworkInterfaceCreateWithInterface(bottomInterface, kSCNetworkInterfaceTypePPP);
you can apply the PPP options directly using:
SCNetworkInterfaceSetConfiguration(interface, myOptions)
You'll have to apply the shared secret using
SCNetworkInterfaceSetExtendedConfiguration(interface, CFSTR("IPSec"), myOptions)
And if you want to enable "Send all traffic over VPN", you'll need to apply those settings by fetching the IPv4 protocol first:
SCNetworkProtocolRef protocol = SCNetworkServiceCopyProtocol(service, kSCNetworkProtocolTypeIPv4);
SCNetworkProtocolSetConfiguration(protocol, myOptions)
The source code mentioned in this answer was extracted from https://github.com/halo/macosvpn/blob/master/macosvpn/Classes/VPNController.m where you can find it in its entirety.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…