I was playing around with my switches at the house, and I ran across something that doesn't make sense to me. According to Cisco, if you enable bpdufiltering globally, then if any portfast enabled port receives a bpdu on that port, it will automatically disable portfast on that port and allow bpdus to be sent/received. However, if you enable bpdufilter directly on the interface, it quietly discards bpdus that are sent/received. Well, I found another document from Cisco that states that enabling it on an interface directly effectively disables spanning tree on that port.
So, I created a loop by leaving portfast on and enabling bpdufiltering on that port. (Don't worry; it's a home lab.) I brought the whole network down.
I can understand why enabling globally would be beneficial, but why would you EVER want to enable it locally on the interface?
As far as bpduguard, why wouldn't you just choose this as opposed to bpdufilter?
Uplinkfast does something quite different. It does allow a redundant link to be brought up much quicker than the normal 45 seconds STP uses but it is not the same as portfast trunk.
I would not turn on portfast trunk on any switch to switch interconnection.
One other thing - depending on the version of STP you are using uplinkfast is either a separate feature ie. in standard 802.1d or it has been intergrated ie. in RSTP 802.1s.